原来一直以为使用 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
相关资源
-
下载
2023-02-10
-
下载
2021-06-05
-
下载
2022-12-22