Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы восстановить объекты, сборщик мусора (GC) должен остановить все выполняемые потоки в приложении. Период времени, в течение которого сборщик мусора активен, называется задержкой.
В некоторых ситуациях, например, когда приложение извлекает данные или отображает содержимое, полная сборка мусора может происходить в критическое время и препятствовать производительности. Вы можете настроить интенсивность сборщика мусора, установив для свойства GCSettings.LatencyMode одно из значений System.Runtime.GCLatencyMode.
Параметры низкой задержки
Использование параметра с низкой латентностью означает, что сборщик мусора меньше влияет на вашу программу. Сборщик мусора более консервативен в отношении высвобождения памяти.
Перечисление System.Runtime.GCLatencyMode предоставляет два параметра низкой задержки:
GCLatencyMode.LowLatency подавляет коллекции поколения 2 и выполняет только коллекции поколения 0 и 1. Его можно использовать только в течение короткого периода времени. В течение длительных периодов времени, если система испытывает недостаток памяти, сборщик мусора активирует сбор данных, который может на короткое время приостановить работу приложения и прервать критически важную операцию. Этот параметр доступен только для сбора мусора на рабочей станции.
GCLatencyMode.SustainedLowLatency подавляет коллекции переднего плана 2 и выполняет только коллекции поколения 0, 1 и фонового поколения 2. Он может использоваться в течение более длительного периода времени и доступен как для сборки мусора рабочей станции, так и для сервера. Этот параметр нельзя использовать, если фоновая сборка мусора отключена.
В периоды низкой задержки коллекции поколения 2 подавляются, если не происходит следующее:
Система получает уведомление о низкой памяти из операционной системы.
Код приложения вызывает коллекцию путем вызова GC.Collect метода и указания 2 для
generationпараметра.
Сценарии
В следующей таблице перечислены сценарии приложения для использования значений GCLatencyMode :
| Режим задержки | Сценарии приложений |
|---|---|
| Batch | Для приложений, у которых нет пользовательских интерфейсов или операций на стороне сервера. Если фоновая сборка мусора отключена, это режим по умолчанию для сборки мусора рабочей станции и сервера. Batch режим также переопределяет параметр gcConcurrent , то есть предотвращает фоновые или параллельные коллекции. |
| Interactive | Для большинства приложений с пользовательским интерфейсом. Это режим по умолчанию для сборки мусора рабочей станции и сервера. Однако если приложение размещено, то параметры сборщика мусора процесса размещения приоритет имеют. |
| LowLatency | Для приложений, имеющих краткосрочные, временные, чувствительные к времени операции, в течение которых прерывания от сборщика мусора могут создавать помехи. Например, приложения, которые отображают анимации или функции получения данных. |
| SustainedLowLatency | Для приложений, которые имеют операции с учетом времени для ограниченной, но потенциально более длительной продолжительности, в течение которой прерывания от сборщика мусора могут быть нарушающими. Например, приложения, которые нуждаются в быстром реагировании при изменении рыночных данных в течение торговых часов. В этом режиме размер управляемой кучи больше, чем в других режимах. Так как она не сжимает управляемую кучу, возможна более высокая фрагментация. Убедитесь, что достаточно памяти доступно. |
Рекомендации по использованию низкой задержки
При использовании режима GCLatencyMode.LowLatency рассмотрите следующие рекомендации:
Постарайтесь максимально сократить период времени с низкой задержкой.
Избегайте выделения больших объемов памяти в периоды низкой задержки. Уведомления о низкой памяти могут возникать, так как сборка мусора освобождает меньше объектов.
Находясь в режиме низкой задержки, следует свести к минимуму количество новых выделений, в частности выделений на кучу больших объектов и зафиксированных объектов.
Помните о потоках, которые могут быть выделены. LatencyMode Поскольку настройка свойства охватывает весь процесс, OutOfMemoryException исключения могут генерироваться в любом потоке, совершающем выделение.
Оберните код с низкой задержкой в ограниченные области выполнения. Дополнительные сведения см. в разделе "Ограниченные регионы выполнения".
Вы можете принудительно выполнять сборки 2 поколения в период низкой задержки, вызвав метод GC.Collect(Int32, GCCollectionMode).