Сборка мусора необходима в некоторых специфических случаях, когда система не может автоматически уничтожить объект, основываясь на некоторых систематических критериях. Например, в случае, когда в системе имеются два неиспользуемых объекта A и B, ссылающихся друг на друга, система не сможет их уничтожить, так как счётчик ссылок у них обоих ненулевой. Для разрешения подобных ситуаций система периодически производит сборку мусора, в процессе которой помечаются все активные объекты, а остальные уничтожаются.
Сборка мусора выполняется в отдельном потоке (для каждого соединения с репозиторием инициализируется свой отдельный поток). По умолчанию используется следующая стратегия: сборка мусора производится, если в текущий момент не выполняются какие-либо методы приложения, проверка на возможность очистки осуществляется каждые две секунды. При необходимости стратегию можно изменить, используя ключи в реестре.
В ветке реестра [HKEY_CURRENT_USER\Software\Foresight\Foresight Analytics Platform\9.0\Fore] могут быть созданы следующие ключи:
Параметр | Описание |
GCStrategy (DWORD) | Стратегия сборки мусора. В качестве значения задается двоичное
однобайтовое число, приведённое к десятичному виду. Первые три
бита числа не используются. Остальные пять позволяют включить
следующие режимы:
Различные режимы могут быть скомбинированы друг с другом. Режим по умолчанию соответствует числу 00001001 в двоичной системе или 9 в десятичной системе. |
GCInterval (DWORD) | Интервал проверки на возможность сборки мусора. Значение задается в миллисекундах. |
Изменение стратегии сборки мусора может привести к замедлению работы выполняемого кода и всего разрабатываемого приложения. Отключение сборки мусора и принудительный вызов методов интерфейса IForeGarbageCollector могут быть актуальны, когда разработчик точно знает в какой момент выполняются ресурсоёмкие процессы, после которых в памяти могут остаться неиспользуемые объекты. Постоянная сборка мусора (режим 00000010) может потребоваться на компьютерах с небольшим количеством оперативной памяти, когда возможен вариант её быстрого переполнения.
См. также: