Effective C# Item16:尽量减少内存垃圾
来源:互联网 发布:淘宝手机访客 编辑:程序博客网 时间:2024/05/17 08:07
虽然.NET提供了垃圾回收机制,可以对托管的资源进行管理,但是创建对象和销毁对象本身,也是要花费时间的,特别是对于引用类型来说,频繁的创建和销毁引用类型的对象,对性能来说,是非常不好的。
我们可以采取一些措施,来改善这种情况。
首先,来看下面的代码。
protected override void OnPaint( PaintEventArgs e ){ // Bad. Created the same font every paint event. using ( Font MyFont = new Font( "Arial", 10.0f )) { e.Graphics.DrawString( DateTime.Now.ToString(), MyFont, Brushes.Black, new PointF( 0,0 )); } base.OnPaint( e );}
如果OnPaint()方法被频繁调用,那么每次调用它时,程序都会创建一个包含相同设置的Font对象,而且在每次退出方法时,垃圾回收器都要删除它们,这样做事很没有效率的。
我们可以将上面代码中的Font对象重构为类的成员变量,这样在调用OnPaint()方法时,就可以重用Font对象。
private readonly Font _myFont = new Font( "Arial", 10.0f );protected override void OnPaint( PaintEventArgs e ){ e.Graphics.DrawString( DateTime.Now.ToString( ), _myFont, Brushes.Black, new PointF( 0,0 )); base.OnPaint( e );}
当方法中的局部变量包含引用类型并且该方法会被频繁调用时,我们可以将引用类型的变量由局部变量提升为类型的成员变量,这种方式对于值类型来说,是没有必要的。
然后,针对平时一些常用的引用类型,我们可以构建该类型的静态实例,这样可以保证类型只被实例化一次。另外,为了提升性能,可以对类型的实例实行延迟加载的策略,只在用到的时候,才会被加载。
最后,当我们构造常量类型的固定值时,例如string,因为对string类型执行+=操作,就相当于重新创建一个string实例,这样在构造的过程中,会产生大量string中间实例,为了减少string实例的数目,我们可以使用stringbuilder来初始化。
总结:垃圾收集器在管理应用程序所使用的内存方法非常有效,但是,记住创建和销毁对象仍然需要花费时间。我们应该避免创建过多的对象;不要创建不需要的对象。也要避免在局部方法内部创建多个引用类型的对象,相反,我们应该考虑将局部变量提升为类型的成员变量,或者为类型中的绝大多数常用类型创建一些静态实例,最后,对于具有常量性的类型,我们应该考虑为它们创建一个支持可变的生成类型。
- Effective C# Item16:尽量减少内存垃圾
- 尽量减少.NET内存垃圾
- Effect C# 条款16 尽量减少内存垃圾的心得
- 《Effective C#》Item 16:尽量减少垃圾产生的数量
- 《Effective C#》Item 16:尽量减少垃圾产生的数量
- 《Effective C#》Item 16:尽量减少垃圾产生的数量
- Effective C# Item17:尽量减少装箱和拆箱
- 《JVM垃圾回收相关内容》开发中,如何尽量减少GC开销,减轻垃圾回收的负担
- Effective Modern C++翻译系列之Item16
- C# 字符串操作--减少垃圾回收压力
- C# 内存垃圾回收
- 尽量减少使用~/
- Effective C# 原则16:垃圾最小化
- More Effective C++ 读书摘要(四、效率)Item16 - 24
- C#内存释放(垃圾回收)
- C#内存释放(垃圾回收)
- 尽量减少布尔操作的内存占用,以及布尔的存储方式
- 尽量减少HTTP请求次数
- 紫外线杀菌器:紫外线杀菌装置的工作原理
- 黑马程序员-进程和线程
- 设计师必读的10本书
- ECharts使用心得
- UVA 1374 迭代加深搜索
- Effective C# Item16:尽量减少内存垃圾
- 修改SAP系统标准字段描述的方法 .
- MIT算法导论学习笔记-Lecture3:分治法
- Echarts使用心得总结(二)
- Effective C# Item17:尽量减少装箱和拆箱
- HDOJ 题目1465 不容易系列一 (全错排)
- 绝对值排序(2020)
- 中水处理设备:生活污水中水回用设备特点解析
- 黑马程序员-----Category,protocol和block(四)