Reputation: 16546
I recently had need to use GC.AddMemoryPressure and it struck me as strange that it doesn't accept the object to add memory pressure to as an argument. I assume because it's so closely tied to the runtime, there is some mechanism by which the this
pointer gets passed to the method. My question is threefold:
Upvotes: 8
Views: 1491
Reputation: 20320
AddMemoryPressure kicks the garbage collector into life sooner than it would do normally. That's all. Suppress and RegisterForFinialise call or not specific code for that type when an instance gets collected and it's finaliser needs to be run...
Suggest you read up on the garbage collector mate, you might find that you didn't need to call IncreaseMemoryPressure, or almost just as likely calling it will cause a deteriation in performance.
Upvotes: 1
Reputation: 1502396
No, it's not explicitly associated with any specific object. The assumption is that at disposal/finalize time, the same object will remove that pressure. From the docs:
In the simplest usage pattern, a managed object allocates unmanaged memory in the constructor and releases it in the Dispose or Finalize method. Call the AddMemoryPressure method after allocating the unmanaged memory, and call the RemoveMemoryPressure method after releasing it.
In more complicated scenarios, the memory pressure may change over time - but it's still expected to be with the co-operation of the object in question.
Upvotes: 3