GC.AddMemoryPressure()如何知道添加内存压力的对象?

时间:2012-01-25 14:58:07

标签: .net garbage-collection

我最近需要使用GC.AddMemoryPressure并且让我感到奇怪的是它不接受添加内存压力的对象作为参数。我假设因为它与运行时紧密相关,所以有一些机制可以将this指针传递给方法。我的问题有三个:

  1. 如何将this指针传递给方法?
  2. 我注意到从静态方法调用它时不会抛出异常。在这种情况下会发生什么?
  3. 为什么其他GC方法(如GC.SupressFinalize和GC.ReRegisterForFinalize)会采用此方法不需要的对象参数?

2 个答案:

答案 0 :(得分:2)

不,它没有与任何特定对象明确关联。假设在处置/完成时间,同一个对象将消除该压力。来自the docs

  

在最简单的使用模式中,托管对象在构造函数中分配非托管内存,并在Dispose或Finalize方法中释放它。在分配非托管内存后调用AddMemoryPressure方法,并在释放后调用RemoveMemoryPressure方法。

在更复杂的场景中,内存压力可能会随着时间的推移而发生变化 - 但仍然可以预期相关对象的合作。

答案 1 :(得分:0)

AddMemoryPressure比通常情况下更快地将垃圾收集器带入生活。就这样。当收集实例并且需要运行终结器时,禁止和RegisterForFinialise调用或不是该类型的特定代码......

建议你阅读垃圾收集器配合,你可能会发现你不需要调用IncreaseMemoryPressure,或者几乎就像调用它会导致性能下降一样。