Как GC.AddMemoryPressure () знает, к какому объекту добавить давление памяти? - PullRequest
4 голосов
/ 25 января 2012

Мне недавно пришлось использовать GC.AddMemoryPressure , и мне показалось странным, что он не принимает объект, к которому добавляется давление памяти, в качестве аргумента.Я предполагаю, что поскольку он так тесно связан со временем выполнения, существует некоторый механизм, с помощью которого указатель this передается методу.Мой вопрос состоит из трех частей:

  1. Как этот указатель передается методу?
  2. Я заметил, что при вызове его из статического метода не возникает исключение.Что происходит в этом случае?
  3. Почему другие методы GC, такие как GC.SupressFinalize и GC.ReRegisterForFinalize, принимают аргумент объекта, где этот метод не нужен?

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Нет, он явно не связан с каким-либо конкретным объектом.Предполагается, что во время удаления / завершения один и тот же объект снимет это давление.Начиная с документа :

В простейшем шаблоне использования управляемый объект выделяет неуправляемую память в конструкторе и освобождает ее в методе Dispose или Finalize.Вызовите метод AddMemoryPressure после выделения неуправляемой памяти и вызовите метод RemoveMemoryPressure после его освобождения.

В более сложных сценариях давление памяти может изменяться со временем, но все равно ожидается, что оно-операция рассматриваемого объекта.

0 голосов
/ 25 января 2012

AddMemoryPressure запускает сборщик мусора быстрее, чем обычно.Это все.Подавить и RegisterForFinialise вызывать или не конкретный код для этого типа, когда экземпляр собирается и его финализатор должен быть запущен ...

Предложите прочитать о помощнике сборщика мусора, вы можете обнаружить, что вы этого не делалинеобходимо вызвать IncreaseMemoryPressure, или почти такой же вероятный вызов вызовет снижение производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...