대기 모드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 열거형은 두 개의 짧은 대기 시간 설정을 제공합니다.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 메서드를 호출하고 generation 매개 변수에 대해 2를 지정하여 수집을 줄입니다.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 UI 또는 서버 쪽 작업이 없는 애플리케이션.For applications that have no UI or server-side operations.

동시 가비지 수집을 사용하지 않을 때 기본 모드입니다.This is the default mode when concurrent garbage collection is disabled.
Interactive UI가 있는 대부분의 애플리케이션의 경우.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).

  • GC.Collect(Int32, GCCollectionMode) 메서드를 호출하여 짧은 대기 시간 기간 중 2세대 수집을 강제할 수 있습니다.You can force generation 2 collections during a low latency period by calling the GC.Collect(Int32, GCCollectionMode) method.

참고 항목See also