Поделиться через


Режимы задержки

Обновлен: Ноябрь 2007

Чтобы получить объекты, сборщик мусора должен остановить все выполняющиеся потоки приложения. В некоторых ситуациях, например при получении приложением данных или при отображении содержимого, полная сборка мусора может произойти в критическое время и привести к снижению производительности. Можно настроить уровень вмешательства сборщика мусора путем задания для свойства LatencyMode одного из значений GCLatencyMode.

Задержка относится ко времени, в течение которого сборщик мусора вмешается в работу приложения. Во время периодов задержки сборщик мусора более консервативен при получении объектов и сильно не вмешивается в работу приложений. Сборки поколения 2 возникают реже, что приводит к росту рабочего набора приложения со временем. В результате рекомендуется использовать режим LowLatency только в течение коротких промежутков времени, только при необходимости. В противном случае, если в системе возникает нехватка памяти, сборщик мусора начнет сборку, что приведет к кратковременной остановке приложения и прервет срочную задачу.

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

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

Режим задержки

Сценарии приложения

Batch

Для приложений, которые не имеют пользовательского интерфейса или операций на стороне сервера. 

 

Interactive

Для большинства приложений, имеющих пользовательский интерфейс. 

LowLatency

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

Режимы сборки мусора по умолчанию

Если свойство LatencyMode не задано, в качестве режима по умолчанию будет использоваться параллельная сборка мусора рабочей станции. Режим зависит от значения двух параметров конфигурации среды выполнения.

  • <gcConcurrent>

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

  • <gcServer>

    Этот параметр указывает на то, что среда CLR выполняет сборку мусора сервера; в противном случае выполняется сборка мусора рабочей станции. Сборку мусора сервера можно использовать только на компьютерах с двумя или большим числом процессоров. По умолчанию она не включена.

    Если этот параметр включен, параметр <gcConcurrent> автоматически отключается.

Ниже приведены значения по умолчанию для параметра GCLatencyMode.

  • Interactive, если режим <gcConcurrent> включен, а режим <gcServer> отключен.

  • Batch, если режим <gcConcurrent> отключен или если оба режима — <gcConcurrent> и <gcServer> — включены.

Bb384202.alert_note(ru-ru,VS.90).gifПримечание.

Параллельная сборка мусора не поддерживается в приложениях, использующих эмулятор платформ x86 WOW64 на 64-разрядных системах, которые реализуют архитектуру Intel Itanium (прежнее название — IA-64). Дополнительные сведения об использовании WOW64 в 64-разрядных версиях Windows см. в разделе о запуске 32-разрядных приложений.

Руководство по использованию небольшой задержки

При использовании режима LowLatency ознакомьтесь со следующими правилами:

  • Оставляйте промежуток времени при небольших задержках как можно меньшим.

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

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

  • Помните о потоках, которые сами могут выделять ресурсы. Так как установка свойства LatencyMode происходит на уровне системы, можно создать исключение OutOfMemoryException в любом потоке, который может выделять ресурсы.

  • Заверните код небольшой задержки в области CER (дополнительные сведения см. в разделе Области с ограничением управления).

  • Можно принудительно запустить сборку поколения 2 во время периодов небольшой задержки посредством вызова метода GC.Collect(Int32, GCCollectionMode).

См. также

Задачи

Практическое руководство. Запрет параллельной сборки мусора

Основные понятия

Индуцированные коллекции

Другие ресурсы

Сборка мусора