优化内存和运行效率
优化内存和运行效率
- 用 GetEnumerator () 遍历 dictionary 和 list ,避免使用 foreach
- dictionary 使用 TryGetValue 一次判断取值,避免两次访问
- 值类型使用引用方式传递,可提高效率 ref
- 避免无意义的初始化,C# 默认初始化是清除内存,所以无意的初始化,会增加内存
- 字符串判断,使用比较 length == 0 效率更高
- cahe 数据,可以避免反复访问;
- 减少字符串的拼接,每次拼接都会产生新的字符串,产生 CG
- 常量使用 const 或 readonly 修饰
- 用 using 包裹,可自动调用 Dispose
结语
C# 语言的 foreach 语句(在 Visual Basic 中为 For Each)隐藏了枚举数的复杂性。因此,建议使用 foreach,而不是直接操作枚举数。
枚举器可用于读取集合中的数据,但不能用于修改基础集合。
最初,枚举数定位在集合中第一个元素的前面。 Reset 方法还将枚举器恢复到此位置。在此位置, Current 属性未定义。因此,在读取的值之前,必须调用 MoveNext 方法,以将枚举器前进到集合的第一个元素 Current 。
在调用 Current 或 MoveNext 之前,Reset 返回同一对象。 MoveNext 将 Current 设置为下一个元素。
如果 MoveNext 越过集合的末尾,则枚举器将定位在集合中最后一个元素之后,并 MoveNext 返回 false 。当枚举器位于此位置时,对的后续调用 MoveNext 也将返回 false 。如果最后一次调用 MoveNext 返回 false , Current 则未定义。若要再次将 Current 设置为集合的第一个元素,可以调用 Reset 并接着调用 MoveNext。
如果对集合所做的更改(如添加、修改或删除元素),则枚举器的行为是不确定的。
枚举数没有对集合的独占访问权;因此,从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性,可以在整个枚举过程中锁定集合。若要允许多个线程访问集合以进行读写操作,则必须实现自己的同步。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 GrayWolf!