Когда можно позвонить в GC.Collect? - PullRequest
154 голосов
/ 25 января 2009

Общий совет заключается в том, что вы не должны вызывать GC.Collect из своего кода, но каковы исключения из этого правила?

Я могу вспомнить только несколько очень конкретных случаев, когда имеет смысл форсировать сборку мусора.

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

Есть ли другие случаи, когда допустимо звонить GC.Collect?

Ответы [ 22 ]

0 голосов
/ 08 января 2017

одна веская причина для вызова GC - на небольших компьютерах ARM с небольшим объемом памяти, таких как Raspberry PI (работает с моно) Если нераспределенные фрагменты памяти используют слишком много системной памяти, ОС Linux может работать нестабильно. У меня есть приложение, в котором я должен вызывать GC каждую секунду (!), Чтобы избавиться от проблем переполнения памяти.

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

0 голосов
/ 16 августа 2016

Если вы используете версию .net менее 4.5, сбор вручную может быть неизбежен (особенно если вы имеете дело со многими «большими объектами»).

эта ссылка описывает почему:

https://blogs.msdn.microsoft.com/dotnet/2011/10/03/large-object-heap-improvements-in-net-4-5/

...