다음을 통해 공유


대기 시간 모드

개체를 회수하려면 GC(가비지 수집기)가 애플리케이션에서 실행 중인 모든 스레드를 중지해야 합니다. 가비지 수집기가 활성 상태인 기간을 대기 시간이라고 합니다.

애플리케이션이 데이터를 검색하거나 콘텐츠를 표시하는 경우와 같은 일부 상황에서는 중요한 시간에 전체 가비지 수집이 발생하고 성능이 저하될 수 있습니다. GCSettings.LatencyMode 속성을 System.Runtime.GCLatencyMode 값 중 하나로 설정하여 가비지 수집기의 침입성을 조정할 수 있습니다.

짧은 대기 시간 설정

"낮은" 대기 시간 설정을 사용하면 가비지 수집기가 애플리케이션에서 더 적게 침입합니다. 가비지 수집은 메모리를 회수하는 데 있어 더 보수적입니다.

열거형은 System.Runtime.GCLatencyMode 대기 시간이 짧은 두 가지 설정을 제공합니다.

  • GCLatencyMode.LowLatency 는 2세대 컬렉션을 표시하지 않으며 0세대 및 1세대 컬렉션만 수행합니다. 짧은 기간 동안만 사용할 수 있습니다. 장기간 동안 시스템이 메모리 부족 상태에 있으면, 가비지 수집기가 수집을 트리거하여 애플리케이션을 일시적으로 중지시키고 시간에 민감한 작업을 방해할 수 있습니다. 이 설정은 워크스테이션 가비지 수집에만 사용할 수 있습니다.

  • GCLatencyMode.SustainedLowLatency 는 전경 2세대 컬렉션을 표시하지 않으며 0세대, 1세대 및 백그라운드 2세대 컬렉션만 수행합니다. 더 오랜 시간 동안 사용할 수 있으며 워크스테이션 및 서버 가비지 수집 모두에 사용할 수 있습니다. 백그라운드 가비지 수집을 사용하지 않도록 설정한 경우에는 이 설정을 사용할 수 없습니다.

대기 시간이 짧은 기간에는 다음이 발생하지 않는 한 2세대 컬렉션이 표시되지 않습니다.

  • 시스템은 운영 체제에서 메모리 부족 알림을 받습니다.

  • 애플리케이션 코드는 메서드를 호출 GC.Collect 하고 매개 변수에 대해 generation 2를 지정하여 컬렉션을 유도합니다.

시나리오

다음 표는 GCLatencyMode 값을 사용할 때의 애플리케이션 시나리오를 보여줍니다.

지연 모드 애플리케이션 시나리오
Batch UI(사용자 인터페이스) 또는 서버 쪽 작업이 없는 애플리케이션의 경우

백그라운드 가비지 수집을 사용하지 않도록 설정하면 워크스테이션 및 서버 가비지 수집의 기본 모드입니다. Batch 모드는 gcConcurrent 설정을 재정의합니다. 즉, 배경 또는 동시 컬렉션을 방지합니다.
Interactive UI가 있는 대부분의 애플리케이션의 경우

워크스테이션 및 서버 가비지 수집의 기본 모드입니다. 그러나 앱이 호스트되는 경우 호스팅 프로세스의 가비지 수집기 설정이 우선합니다.
LowLatency 가비지 수집기로 인한 중단이 발생할 수 있는 단기적이고 시간에 민감한 작업이 있는 애플리케이션의 경우. 예를 들어 애니메이션 또는 데이터 취득 함수를 렌더링하는 애플리케이션입니다.
SustainedLowLatency 지속 시간이 포함되되 잠재적으로 더 긴 기간 동안 가비지 수집기의 작업 중단이 방해가 될 수 있는 시간에 민감한 작업을 포함하는 애플리케이션의 경우. 예를 들어 거래 시간 동안 시장 데이터가 변경됨에 따라 빠른 응답 시간이 필요한 애플리케이션.

이 모드는 다른 모드보다 관리되는 힙 크기가 커지게 됩니다. 관리되는 힙을 압축하지 않으므로 조각화가 심해질 수 있습니다. 충분한 메모리를 사용할 수 있는지 확인합니다.

짧은 대기 시간 사용에 대한 지침

GCLatencyMode.LowLatency 모드를 사용하는 경우 다음 지침을 고려합니다.

  • 짧은 대기 시간으로 기간을 최대한 짧게 유지합니다.

  • 짧은 대기 시간 동안 많은 양의 메모리를 할당하지 마세요. 가비지 수집이 개체를 적게 회수하기 때문에 메모리 부족 알림이 발생할 수 있습니다.

  • 짧은 대기 시간 모드에서는 새 할당의 수, 특히 큰 개체 힙 및 고정된 개체에 대한 할당 수를 최소화합니다.

  • 할당할 수 있는 스레드에 유의하세요. 속성 설정은 LatencyMode 프로세스 수준 OutOfMemoryException 이므로 할당하는 모든 스레드에서 예외를 생성할 수 있습니다.

  • 제한된 실행 지역에서 짧은 대기 시간 코드를 래핑합니다. 자세한 내용은 제한된 실행 지역을 참조하세요.

  • 메서드를 호출하여 짧은 대기 시간 동안 2세대 컬렉션을 강제 적용할 GC.Collect(Int32, GCCollectionMode) 수 있습니다.

참고하십시오