Что нужно для вызова GC.Collect, если я использую GC.AddMemoryPressure и GC.RemoveMemoryPressure - PullRequest
0 голосов
/ 22 июня 2011

Исключите из этой статьи , написанной не кем иным, как Джеффри Рихтером.Мой вопрос заключается в том, что, если я использую API GC.AddMemoryPressure и GC.RemoveMemoryPressure, НИКОГДА не должно быть необходимости вызывать GC.Collect () вообще.В этом случае я не понимаю утверждения JR, что вызов GC.Collect может помочь.Любые идеи?

, поскольку ваше приложение знает о своем поведении больше, чем среда выполнения, вы могли бы помочь в этом, явно форсировав некоторые коллекции.

1 Ответ

0 голосов
/ 22 июня 2011

Если вы продолжили чтение, текст взят из этого отрывка:

В большинстве случаев вам следует избегать вызова любого из методов Collect;Лучше всего позволить сборщику мусора работать самостоятельно. Однако, поскольку ваше приложение знает больше о своем поведении, чем среда выполнения, вы могли бы помочь решить вопросы путем явного форсирования некоторых коллекций. Например, для вашего приложения может иметь смысл форсировать полную коллекцию всех поколений послепользователь сохраняет свой файл данных.Я представляю, что интернет-браузеры выполняют полную коллекцию, когда страницы выгружаются.Возможно, вы также захотите форсировать коллекцию, когда ваше приложение выполняет другие длительные операции;это скрывает тот факт, что сбор занимает время обработки, и предотвращает возникновение коллекции, когда пользователь взаимодействует с вашим приложением.

Как указано в статье, если вы знаете это прямо сейчас,большое количество объектов стало недоступным, вы можете заставить коллекцию убедиться, что они не увеличивают нагрузку на память больше, чем необходимо.

Сборщик мусора в конечном итоге запустится и соберет их, но в некоторых отдельных случаяхвы знаете больше о текущем состоянии памяти, чем сборщик, и, таким образом, вы можете добавить специальные вызовы сборщику мусора, чтобы заставить его работать.

Лучший совет, который я могу дать, это:

Общее правило - это просто общее правило, но, как и во всех правилах и рекомендациях, вам необходимо знать, когда их безопасно нарушать .Если вы этого не сделаете, вы не должны.

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