迭代器是.NET 编程模型的核心。只有很少的开发人员以索引数据的方式工作,很多人都喜欢使用 for-each 循环来完成大部分任务。但是这种固有地顺序访问方式,在我们大量开发多线程应用程序的时候还适合吗?
如果你考虑一下迭代器获取下一个元素的这一主要任务,然后研究一下它是如何工作,你就应该明白它的重要设计缺陷……这个操作不是原子性的。迭代器是 IEnumerator 或 IEnumerator(Of T) 的实现,IEnumerator 要求你首先调用 MoveNext 方法然后读取 Current 属性。如果你允许多线程使用同样的 IEnumerator,那么你将得到这样一个调用序列:MoveNext、MoveNext、Current、Current,这样将跳过一个条目而重复下一个条目。所以 IEnumerator 并没有很好地考虑多线程的情况。这是一个已知的设计限制,但是不仅如此,像 C#这样实现自己迭代器的语言还为每个线程生成了不同的迭代器。那就是说,C#不仅认可了这种限制,还加强了它。
更多内容推荐
51|Flink Table API/SQL 介绍与使用
2020 年 10 月 29 日
C# 8 中的 Async Streams
C# 8中新增了异步流(Async Streams),允许异步方法返回多个值。Bassam Alugili将在这篇文章中详细介绍这一特性。
小程序的特点及开发能力
2020 年 5 月 20 日
62|Apache Hive 集成
2020 年 11 月 12 日
关于 SubSonic 的问答
SubSonic 是一个类似Rails的开源.NET项目。你可以把它看作是一把瑞士军刀,它可以用来构建Website和通过ORM方式来访问数据。Eric和Rob很高兴能和InfoQ深入讨论他们的作品。
语法面面观:面向表达式(中)
2020 年 9 月 24 日
面向注解的事件 / 监听器设计模式:便利也会带来伤害?
2020 年 6 月 11 日
Jeff Moser 解释.NET 正则表达式的工作方式
你是否知道最近使用的15个正则表达式会被缓存?是否知道.NET引擎会使用一种机器码?经过Jeff Moser深入解析.NET中正则表达式的工作方式之后您就会了解这些。
Brad Abrams 终于完成了.NET RIA Services 的开发系列文章
经过4个月的写作,微软CLR和.NET框架团队的创始成员Brad Abrams,终于完成了多达26篇关于如何使用Silverlight 3 RTM和.NET RIA Services 7月更新版进行开发的系列文章。他用示例的方式为大家详细讲述了用Silverlight 3开发RIA的各个方面。
池化.NET 内存流以解决大内存堆分配问题
与很多依赖于标记-清理的垃圾回收器的语言一样,C#也会在频繁分配内存或分配大块内存时产生性能问题。微软必应的高级软件开发工程师Ben Watson,就曾在使用MemoryStream类的时候遇到了这种问题。
Entity Framework 6.3 和 EF Core 3.0 路线图
尽管脱离了 .NET Core发布循环,但是EF Core正在开发其3.0路线图。除此之外,还对原来的Entity Framework进行了一些重要的变更。
使用.NET 发送格式丰富的电子邮件
格式丰富的电子邮件需要一点儿CSS,但电子邮件客户端并不总能处理好CSS所需的内联样式。对于Ruby来说,这可以简单地通过Alex Dunae's Premailer库来处理,但从.NET调用它对于大多数开发者来说都是不可取的。因此,Martin H. Normark创建了一个.NET版的,名叫PreMailer.NET。
Silverlight 将不再支持 ArrayList 类型
为了减小Silverlight运行时的文件大小,大多数非泛型集合类型将不会再被支持。这些非泛型集合类型主要是那些曾经一度被看作.NET编程本质的类型,如ArrayList、Hashtable和Comparer等。
性能是.NET Core 的一个关键特性
.NET Core核心带来了许多性能方面的优化,无论是在执行速度方面还是内存分配方面。示例是集合和LINQ扩展方法、文本处理、网络的优化,还有一些新的类型和概念,比如可以用Span做些有趣的事情。在本文中,我们将讨论如何使用这些新概念。
.NET 4.5 中任务并行类库的改进
微软正在努力改进.NET 4.5中应用程序的性能,特别是使用任务并行类库(Task Parallel Library)的那些应用。一项最大的改进就是把等待十亿项任务的负载从12,000,000比特减少到仅仅64比特。
语言专有的类库应该放到.NET 里吗?
.NET平台上缺少许多基础功能。例如,它没有内置读取CSV文件,复制目录,或者操作zip文件的方法。当然,事实上.NET提供了这些类库,不过您必须深入挖掘才能发现它们。
.NET 4 中废弃的特性
随着新的CLR和Base Class Library的引入,微软趁机做了些“家务事”。虽然真正被移除的不多,但我们还是看到了微软列出的长长的废弃类型与成员列表,或许最引入注意的就是移除了对ASP.NET WebForms的移动支持。
集体编程的额外优点
2020 年 9 月 1 日
微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient
微软继续努力将微软产品从.NET Core中分离出来,并将SQL Server驱动程序分离到了一个单独的部署流中。
暂无签名
推荐阅读
@AspectJ Pointcut 指令与表达式:为什么 Spring 只能有限支持?
2020 年 12 月 31 日
微软发布 .Net for Apache Spark :用什么语言开发大数据都可以
.NET 4.5 对 Base Class Library 做出改善
讨论:泛型是否会对性能产生负面影响
.NET 4 特性聚焦:并行编程
依赖查找 VS. 依赖注入:为什么 Spring 总会强调后者,而选择性忽视前者?
2020 年 1 月 2 日
分布式流处理模型
2020 年 9 月 17 日
电子书
大厂实战PPT下载
换一换 赵磊 | 阿里巴巴 新零售事业群淘系技术部PMO&技术战略发展负责人
黄东旭 | PingCAP 联合创始人兼 CTO
刘旭明 | 华为云 IoT 生态产品总监
评论