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

Чтобы освободить объекты, сборщик мусора должен остановить все выполняющиеся потоки приложения.To reclaim objects, the garbage collector must stop all the executing threads in an application. В некоторых ситуациях, например, когда приложение получает данные или отображает содержимое, полная сборка мусора может произойти в критическое время и снизить производительность.In some situations, such as when an application retrieves data or displays content, a full garbage collection can occur at a critical time and impede performance. Степень вмешательства сборщика мусора можно настроить, присвоив свойству GCSettings.LatencyMode одно из значений System.Runtime.GCLatencyMode.You can adjust the intrusiveness of the garbage collector by setting the GCSettings.LatencyMode property to one of the System.Runtime.GCLatencyMode values.

Периоды ожидания указывает время, когда сборщик мусора может активизироваться в приложении.Latency refers to the time that the garbage collector intrudes in your application. В периоды небольшого времени ожидания сборщик мусора более осторожен и меньше вмешивается в освобождение объектов.During low latency periods, the garbage collector is more conservative and less intrusive in reclaiming objects. Перечисление System.Runtime.GCLatencyMode предоставляет 2 параметра малого времени ожидания:The System.Runtime.GCLatencyMode enumeration provides two low latency settings:

  • LowLatency отключает сборку мусора для объектов поколения 2 и выполняет только сборку мусора для объектов поколений 0 и 1.LowLatency suppresses generation 2 collections and performs only generation 0 and 1 collections. Его можно использовать только в течение коротких периодов времени.It can be used only for short periods of time. Если в системе за продолжительный период возникнет нехватка памяти, сборщик мусора начнет сборку, что приведет к кратковременной остановке приложения и прервет срочную задачу.Over longer periods, if the system is under memory pressure, the garbage collector will trigger a collection, which can briefly pause the application and disrupt a time-critical operation. Этот параметр доступен только для сборки мусора на рабочей станции.This setting is available only for workstation garbage collection.

  • SustainedLowLatency отключает приоритетную сборку мусора для объектов поколения 2 и выполняет только сборку объектов поколений 0 и 1 и фоновую сборку объектов поколения 2.SustainedLowLatency suppresses foreground generation 2 collections and performs only generation 0, 1, and background generation 2 collections. Его можно использовать дольше и он доступен для сборки мусора как на рабочей станции, так и на сервере.It can be used for longer periods of time, and is available for both workstation and server garbage collection. Этот параметр нельзя использовать, если параллельная сборка мусора отключена.This setting cannot be used if concurrent garbage collection is disabled.

В периоды небольшого времени ожидания сборка мусора для объектов поколения 2 подавляется, пока не произойдет одно из следующего:During low latency periods, generation 2 collections are suppressed unless the following occurs:

  • система получит уведомление о нехватке памяти от операционной системы;The system receives a low memory notification from the operating system.

  • код приложения запустит сборку мусора путем вызова метода GC.Collect и укажет значение 2 для параметра generation.Your application code induces a collection by calling the GC.Collect method and specifying 2 for the generation parameter.

В следующей таблице перечислены сценарии работы приложений с использованием значений GCLatencyMode.The following table lists the application scenarios for using the GCLatencyMode values.

Режим периода ожиданияLatency mode Сценарии приложенияApplication scenarios
Batch Для приложений, которые не имеют пользовательского интерфейса или операций на стороне сервера.For applications that have no UI or server-side operations.

Этот режим используется по умолчанию, если параллельная сборка мусора отключена.This is the default mode when concurrent garbage collection is disabled.
Interactive Для большинства приложений, имеющих пользовательский интерфейс.For most applications that have a UI.

Этот режим используется по умолчанию, если параллельная сборка мусора включена.This is the default mode when concurrent garbage collection is enabled.
LowLatency Для приложений, которые осуществляют операции, чувствительные ко времени выполнения, для которых перерывы в работе из-за сборки мусора могут иметь резко отрицательные последствия.For applications that have short-term, time-sensitive operations during which interruptions from the garbage collector could be disruptive. Например, это приложения, которые выполняют функции анимации или получения данных.For example, applications that do animation rendering or data acquisition functions.
SustainedLowLatency Для приложений, которые осуществляют операции, чувствительные ко времени выполнения, время выполнения которых ограничено, но может быть достаточно продолжительным, для которых перерывы в работе из-за сборки мусора могут иметь резко отрицательные последствия.For applications that have time-sensitive operations for a contained but potentially longer duration of time during which interruptions from the garbage collector could be disruptive. Например, приложения, требующие быстрого отклика при изменении рыночных показателей в торговую сессию.For example, applications that need quick response times as market data changes during trading hours.

Этот режим использует больший размер управляемой кучи, нежели другие режимы.This mode results in a larger managed heap size than other modes. Так как он не сжимает управляемую кучу, возможен больший уровень фрагментации.Because it does not compact the managed heap, higher fragmentation is possible. Необходимо обеспечить достаточный объем памяти.Ensure that sufficient memory is available.

Рекомендации по использованию режима небольшого времени ожиданияGuidelines for Using Low Latency

При использовании режима LowLatency придерживайтесь следующих рекомендаций.When you use LowLatency mode, consider the following guidelines:

  • Продолжительность периодов небольшого времени ожидания должна быть как можно более короткой.Keep the period of time in low latency as short as possible.

  • Избегайте выделения больших объемов памяти в периоды небольшого времени ожидания.Avoid allocating high amounts of memory during low latency periods. Могут возникать уведомления о нехватке памяти, потому что сборщик мусора освобождает меньше объектов.Low memory notifications can occur because garbage collection reclaims fewer objects.

  • В режиме небольшого времени ожидания необходимо свести к минимуму число выделений, в частности выделений в куче для больших объектов и закрепленных объектов.While in the low latency mode, minimize the number of allocations you make, in particular allocations onto the Large Object Heap and pinned objects.

  • Не забывайте про потоки, которые могут выделять память.Be aware of threads that could be allocating. Поскольку свойство LatencyMode относится ко всему процессу, то можно создать OutOfMemoryException в любом потоке, выделяющем память.Because the LatencyMode property setting is process-wide, you could generate an OutOfMemoryException on any thread that may be allocating.

  • Поместите код с небольшим временем ожидания в области с ограничением выполнения (см. дополнительные сведения об областях с ограничением выполнения).Wrap the low latency code in constrained execution regions (for more information, see Constrained Execution Regions).

  • Можно принудительно запускать освобождение объектов поколения 2 в периоды небольшого времени ожидания путем вызова метода GC.Collect(Int32, GCCollectionMode).You can force generation 2 collections during a low latency period by calling the GC.Collect(Int32, GCCollectionMode) method.

См. такжеSee also