zoukankan      html  css  js  c++  java
  • CLR via C# 读书笔记 54 在使用非托管资源情况下的GC

    有些时候,非托管资源会占用大量的内存, 而托管资源只占用一点资源,那么GC很难估计是否应该对这个资源进行垃圾回收,因为很难满足原来提到过的GC回收的条件(例如Gnereation 0 满了)

    为了解决这个情况,GC提供了以下两个方法

    public static void AddMemoryPressure(Int64 bytesAllocated);
    public static void RemoveMemoryPressure(Int64 bytesAllocated);

    所有包含大型非托管资源的托管类应该使用这些方法告诉GC他们准备使用多少内存

    由此,GC在内部监控内存压力,当内存压力很大的时候,就会执行一次GC

    GC.AddMemoryPressure 和 HandleCollector.Add其实内部也是使用GC.Collect方法来回收内存

    过多的调用GC.Collect在这里会造成性能损耗,不过性能损耗总比程序崩溃来的好....

  • 相关阅读:
    hdu-1114
    hdu2546
    POJ-3126
    POJ-1915
    ZOJ-1709
    Codeforces 847H
    Codeforces 847C
    Codeforces 847I
    Codeforces 847E
    算法笔记--矩阵及矩阵快速幂
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/1901263.html
Copyright © 2011-2022 走看看