2013年11月6日

最佳策略

摘要: 大部分内容是看书所做笔记,放上来只为温习。最佳的资源清理策略,应该是同时实现 Finalize 方式和 Dispose方式。一方面,Dispose方法可以克服Finalize 方法在性能上的诸多弊端;另一方面,Finalize 方法又能够确保没有显式调用 Dispose 方法时,也自行回收使用的所有资源。事实上,.NET 框架类库的很多类型正是同时实现了这两种方式,例如FileStream等。因此,任何重写了 Finalize 方法的类型都应实现 Dispose 方法,来实现更加灵活的资源清理控制。using语句简化了资源清理代码实现,并且能够确保 Dispose 方法得到调用,因此值得推荐。 阅读全文

posted @ 2013-11-06 08:51 sajiao 阅读(570) 评论(0) 推荐(0) 编辑

.net非托管资源

摘要: 常见的非托管资源包括数据库链接、文件句柄、网络链接、互斥体、COM对象、套接字、位图和GDI+对象等非托管资源的清理,主要有两种方式:Finalize 方法和 Dispose 方法,这两种方法提供了在垃圾收集执行前进行资源清理的方法。Finalize 方式,又称为终止化操作,其大致的原理为:通过对自定义类型实现一个Finalize 方法来释放非托管资源,而终止化操作在对象的内存回收之前通过调用 Finalize方法来释放资源;Dispose 模式,指的是在类中实现 IDisposable 接口,该接口中的Dispose 方法定义了显式释放由对象引用的所有非托管资源。因此,Dispose 方法提 阅读全文

posted @ 2013-11-06 08:49 sajiao 阅读(2092) 评论(0) 推荐(0) 编辑

.net内存何时回收?

摘要: 垃圾收集器周期性的执行内存清理工作,一般在以下情况出现时垃圾收集器将会启动:(1)内存不足溢出时,更确切地应该说是第 0代对象充满时。(2)调用 GC.Collect 方法强制执行垃圾回收。(3)Windows报告内存不足时,CLR 将强制执行垃圾回收。(4)CLR 卸载AppDomain 时,GC将对所有代龄的对象执行垃圾回收。(5)其他情况,例如物理内存不足,超出短期存活代的内存段门限,运行主机拒绝分配存等等。GC 将着手进行内存清理,当内存释放之前GC会首先检查终止化链表中是否有记录来决定在释放内存之前执行非托管资源的清理工作,然后才执行内存释放。同时,微软强烈建议不要通过 GC.Col 阅读全文

posted @ 2013-11-06 08:47 sajiao 阅读(1119) 评论(1) 推荐(1) 编辑

导航

街边网