Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Чтобы восстановить объекты, сборщик мусора (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).