Режимы работы Garbage Collector в. Net framework

Режимы работы Garbage Collector в. Net framework

Каждый кто хотя бы раз занимался оптимизации. Net приложений и анализировал их с помощью какого-либо профайлера, например, dotTrace, наверняка знает, что довольно-таки значимую часть ресурсов процессора потребляет Garbage Collector.

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

Первое, о чем хотелось бы поговорить, это свойство IsServerGC класса GCSettings. В случае если ваше приложение является серверным, и при этом на сервере оно является доминирующей аппликацией, то имеет смысл установить это свойство в True. При этом GC будет использовать процессор сервера на полную катушку, таким образом увеличив производительность сборщика мусора. Установить это свойство в True можно, внеся следующие изменения в конфигурационный файл приложения:

<configuration>

<runtime>

<gcServer enabled="true" />

</runtime>

</configuration>

Следующее свойство GCLatencyMode служит для установки степени активности, с которой сборщик мусора будет проводить очистку памяти. Возможны три опции:

Interactive – значение по умолчанию. Походит для большинства десктопных приложений.

Batch – можно обратить внимание на этот вариант, если ваше приложение является серверным.

LowLatency – с данным режимом работы Garbage Collector нужно быть очень осторожным. При этом работа коллетора практически полностью прекращается, и вся ответственность за стабильность работы приложения ложится на плечи разработчика. Данную опцию имеет смысл включать на очень короткое время при выполнении особенно критических операций. Устанавливать LowLatency следует только таким способом:

GCLatencyMode oldMode = GCSettings. LatencyMode;

RuntimeHelpers. PrepareConstrainedRegions(); try {

GCSettings. LatencyMode = GCLatencyMode. LowLatency;

// perform time-sensitive actions here

} finally {

GCSettings. LatencyMode = oldMode;

}

В данной реализации необходимо убедиться, что старый Latency Mode будет восстановлен при любом исходе выполнения блока try. Для этого используется блок finally, а также механизм Constrained Execution Regions.

Отличное описание работы горбатого коллектора есть в первоисточнике.


Карта сайта


Информационный сайт Webavtocat.ru