2010-11-25 81 views
6

對非託管對象使用Add/RemoveMemoryPressure的正確方法是什麼?我有一個非託管對象 - 但它大量使用,例如,STL容器。我是否應該不斷更新託管GC,以更改非託管對象的總大小?或者只是它的原始分配大小?我何時打電話給RemoveMemoryPressure?終結? Dispose()方法?非託管對象的GC.AddMemoryPressure

+0

您如何期待垃圾收集器收集非託管對象? – dtb 2010-11-25 23:20:19

+1

@dtb:[GC.AddMemoryPressure](http://msdn.microsoft.com/en-us/library/system.gc.addmemorypressure.aspx)告訴運行時,有一個託管對象保留分配的非託管內存x字節(例如通過引用COM對象)。這可能會鼓勵垃圾收集器查找死對象並運行它們的終結器,釋放進程中的非託管內存。 – 2010-11-25 23:32:58

回答

2

here(和由@Wim科嫩說明):

在最簡單的使用模式,一個 管理對象分配在構造非託管 存儲器並釋放 它的Dispose或Finalize方法。 分配非託管內存 後調用AddMemoryPressure方法 並在釋放後調用RemoveMemoryPressure 方法。

在更復雜的情景,其中 非託管存儲器分配基本上 變化 壽命管理對象的過程中,你 可以調用AddMemoryPressure和 RemoveMemoryPressure方法 通信這些增量變化 到運行時

所以你必須決定多少努力才能跟蹤這些變化以及你將獲得多少收益。