2010-11-25 93 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方法 通信这些增量变化 到运行时

所以你必须决定多少努力才能跟踪这些变化以及你将获得多少收益。