in

搜趣堡 - 中心街区

沈阳人的网上综合社区

半冬眠的壳儿

岁月需要回忆朋友要相聚,缘分需要偶遇生命要延续;该来就来该去就去,无所谓歌舞升平无所谓灯红酒绿;只为人生更加美丽!

.net 的垃圾回收(GC)

本来是希望找到一些 C# 使用内存的建议,让应用在 .NET 的 GC 中可以更高效的工作。不过 MSDN 和 INTERNET 大多是讲原理的资料,通常的建议是在 managed 环境下工作最好不要过多地干预 GC 的行为而是让它独立的运作会更好。对于一些 unmanaged 的资源如数据库连接、网络连接、文件句柄,合理地使用 using 和 try/finally 来调用 close 方法对于不是太大规模的应用也基本上足够。

当一个类需要自己提供析构函数实现 finalize 方法的时候需要注意的问题要稍微多一些,比如 MSDN 这篇文章提到了内存自动回收时对象的复活问题,当一个对象在 heap 中没有被引用的情况下,GC 会认为对象已死,回收时调用对象的 finalize 方法需要将对象暂时激活并保存在 Application 中,这时如果用户程序试图访问这个半死不活的对象时可能会出现一些无法预知的错误,所以类的实现代码中最好有一个 bool 类型的成员起到标识的作用来避免这种情况的发生(要死要活的还真是蛮搞笑的...),这篇文章的 Part2 还提到了一个弱引用(Weak Reference)的问题,对于大容量内存使用场景提升效率有一定的帮助。

参考:Garbage Collection in .NET

评论

暂无评论