对foreach进行内存优化

int[] (Array) 数组类型 使用 foreach 不会产生GC内存,使用GetEnumerator 产生GC内存 

原因: 数组中的Enumerator 是对象类型这是intArray调用GetEnumerator产生GCAlloc的原因。


List  泛型list类型 使用foreach会产生GC内存,使用GetEnumerator不产生内存。

原因:泛型List中的Enumerator是值类型,所以它不会产生GCAlloc。


ArrayList 集合,使用foreach 和 GetEnumerator都会产生内存

原因:foreach增加了一个box装箱操作,所以产生了GCAlloc。


小结 int[] (Array) List< int > ArrayList
foreach 不产生 产生 产生
GetEnumerator 产生 不产生 产生
  • 结论:
1、 如果能使用数组,就直接使用数组,对它直接使用foreach不产生GC Alloc。
2、 尽可能不要使用数组的GetEnumerator 方法,会产生新GC Alloc。
3、 当我们需要动态数组时,最好使用List这种泛型格式。当遍历它们时,我们不要使用foreach,而应该改用GetEnumerator。
4、 尽可能避免使用ArrayList,对它的遍历操作均会产生新的GC Alloc。

你可能感兴趣的:(编程指南)