2010年12月9日

CLR via C# 读书笔记 5-5 预留大内存

摘要: 在进行需要很大内存空间的计算时,非常容易发生OutOfMemoryExceptionSystem.Runtime.MemoryFailPoint提供了在运行需要大内存的计算前进行内存检查的功能在调用该方法的时候执行了以下步骤(如果不完全确定所需的内存大小,可以传近似值)1.检查系统的页面文件是否有足够大的可用空间,检查进程中是否有足够的连续虚拟地址空间2.如果这里没有足够的空间,就会启动GC尝试回收一些内存3.如果GC之后依然没有足够的页面文件空间,,尝试扩大页面文件,如果页面文件大小还是没法达到要求,抛出InsufficientMemoryException4.如果进程中没有足够的连续虚拟地 阅读全文

posted @ 2010-12-09 15:44 听说读写 阅读(987) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 5-4 在使用非托管资源情况下的GC

摘要: 有些时候,非托管资源会占用大量的内存, 而托管资源只占用一点资源,那么GC很难估计是否应该对这个资源进行垃圾回收,因为很难满足原来提到过的GC回收的条件(例如Gnereation 0 满了)为了解决这个情况,GC提供了以下两个方法[代码]所有包含大型非托管资源的托管类应该使用这些方法告诉GC他们准备使用多少内存由此,GC在内部监控内存压力,当内存压力很大的时候,就会执行一次GCGC.AddMemoryPressure 和 HandleCollector.Add其实内部也是使用GC.Collect方法来回收内存过多的调用GC.Collect在这里会造成性能损耗,不过性能损耗总比程序崩溃来的好.. 阅读全文

posted @ 2010-12-09 14:46 听说读写 阅读(316) 评论(0) 推荐(0) 编辑

导航