原来一直以为使用 C# 的 foreach 语句会产生不必要的 Enumerator 对象, 所以自己写程序时能手动 for 迭代就不用 foreach. 今天看到一篇文章,作者使用 CLR Profiler 来监测程序是否生成 Enumerator.

结果是
1. System.ObjectModel.Collection<T>产生 Enumerator 对象
2. System.Collections 中的 ArrayList, Queue 等数据结构产生 Enumerator 对象
3. System.Collections.Generics 中的范型数据结构都不会产生 Enumerator
4. 数组不会产生
5. 显式使用 GetEnumerator 方法, 或者把对象转换成 IEnumerable 再迭代都产生 Enumerator 对象

这种不产生迭代器对象的原因其实是编译时编译器对代码的优化.
以及运行时的优化.

相关文章:

  • 2021-09-17
  • 2022-02-08
  • 2022-12-23
  • 2021-10-18
  • 2021-07-10
  • 2022-01-10
  • 2021-12-06
  • 2022-12-23
猜你喜欢
  • 2022-01-20
  • 2021-05-31
  • 2021-06-21
  • 2022-01-01
  • 2021-09-12
  • 2021-08-08
  • 2022-12-23
相关资源
相似解决方案