Чтобы сделать это (и мне приходилось делать это с частыми> 50 МБ выделениями), позвоните:
myObj = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Я заметил, что объем памяти приложения значительно уменьшится. Теоретически вам не нужно этого делать. Однако на практике с 32-битной ОС Windows вы можете получить 2 смежных блока размером> 300 Мбайт в любой момент времени, и если это пространство будет занято множеством небольших или ряда больших выделений, это может означать, что другие большие выделения будут терпеть неудачу без необходимости. Сборщик мусора работает в фоновом режиме, когда это возможно, но если вам абсолютно необходимо сделать большие выделения прямо сейчас, этот набор строк помогает сделать это возможным для меня.
РЕДАКТИРОВАТЬ: Из того, что я положил в комментариях, для downvoters.
Если вы прочитаете весь пост о сборе мусора Рико Мариани , вы заметите, что большие, нечастые, непредсказуемые выделения памяти попадают в сценарий № 2. Кому:
Правило № 2
Рассмотрите возможность вызова GC.Collect (), если некоторые
случайное событие только что произошло
и это событие, скорее всего,
вызвало много старых объектов
умереть.
Классический пример этого, если вы
написание клиентского приложения и вы
отображать очень большой и сложный
форма, которая имеет много данных, связанных
с этим. Ваш пользователь только что
взаимодействовал с этой формой потенциально
создавая большие объекты ... вещи
как документы XML, или большой набор данных
или два Когда форма закрывает эти
объекты мертвы и поэтому GC.Collect ()
вернет память, связанную
с ними.
Теперь, почему я предложил бы это как
возможное время позвонить коллекционеру?
Я имею в виду, мой обычный совет идет что-то
вроде "коллекционер самонастраивается так
не связывайтесь с этим ". Почему изменения
Вы можете спросить об отношении?
Ну вот ситуация, когда
склонность коллекционера [sic] пытаться предсказать
будущее, основанное на прошлом, вероятно
быть неудачным.
Если вы делаете большие выделения в своей игре, вам нужно быть осторожным с обработкой памяти. Сборщик мусора работает на основе прогнозирования, основанного на прошлых событиях, и большие блоки памяти на 32-битной машине могут иметь разрушительные последствия для будущих распределений, если не будут должным образом управляться. Если вы этого не сделали, автоматически не предполагайте, что я неправ; если бы вы сделали это, я бы приветствовал объяснение того, как сделать это правильно (то есть, как выполнить дефрагментацию памяти, чтобы убедиться, что я всегда могу выделить 50-100 МБ памяти в данный момент времени).