다음을 통해 공유


유도된 컬렉션

대부분의 경우 가비지 수집기는 컬렉션을 수행하는 데 가장 적합한 시간을 결정할 수 있으며 독립적으로 실행하도록 해야 합니다. 강제 컬렉션이 애플리케이션의 성능을 향상시킬 수 있는 경우는 드물다. 이러한 경우, GC.Collect 메서드를 사용하여 가비지 수집을 강제로 유도할 수 있습니다.

GC.Collect 애플리케이션 코드의 특정 지점에서 사용되는 메모리 양이 크게 감소하는 경우 이 메서드를 사용합니다. 예를 들어 애플리케이션에서 여러 컨트롤이 있는 복잡한 대화 상자를 사용하는 경우 대화 상자가 닫혀 있을 때 호출 Collect 하면 대화 상자에서 사용하는 메모리를 즉시 회수하여 성능이 향상될 수 있습니다. 가비지 수집기가 최적이 아닌 시간에 개체를 회수하려고 하면 성능이 저하될 수 있으므로 애플리케이션이 가비지 수집을 너무 자주 유도하지 않는지 확인합니다. GCCollectionMode.Optimized 열거형 값을 Collect 메서드에 제공하여, 다음 섹션에서 설명한 것처럼 수집이 효과적일 때만 수집할 수 있습니다.

GC 컬렉션 모드

다음과 같이 값이 포함된 GC.Collect 메서드 오버로드 중 GCCollectionMode 하나를 사용하여 강제 컬렉션의 동작을 지정할 수 있습니다.

GCCollectionMode 설명
Default 실행 중인 .NET 버전에 대한 기본 가비지 수집 설정을 사용합니다.
Forced 가비지 컬렉션이 즉시 수행되도록 강제합니다. 이는 오버로드를 호출하는 GC.Collect() 것과 동일합니다. 그러면 모든 세대의 전체 차단 컬렉션이 생성됩니다.

즉시 전체 차단 가비지 수집을 강제 적용하기 전에 GCSettings.LargeObjectHeapCompactionMode 속성을 GCLargeObjectHeapCompactionMode.CompactOnce으로 설정하여 큰 개체 힙을 압축할 수 있습니다.
Optimized 가비지 수집기가 현재 시간이 개체를 회수하는 데 최적인지 여부를 확인할 수 있도록 합니다.

가비지 수집기는 수집이 정당화될 만큼 생산적이지 않다고 판단할 수 있으며, 이 경우 개체를 회수하지 않고 반환됩니다.

배경 또는 차단 컬렉션

메서드 오버로드를 GC.Collect(Int32, GCCollectionMode, Boolean) 호출하여 유도된 컬렉션이 차단되는지 여부를 지정할 수 있습니다. 수행되는 컬렉션의 형식은 메서드 modeblocking 매개 변수의 조합에 따라 달라집니다. mode 는 열거형의 GCCollectionMode 멤버이며 blocking 값입니다 Boolean . 다음 표는 modeblocking 인수의 상호 작용을 요약합니다.

mode blocking = true blocking = false
Forced 또는 Default 차단 컬렉션은 가능한 한 빨리 수행됩니다. 백그라운드 컬렉션이 진행 중이고 생성이 0 또는 1 Collect(Int32, GCCollectionMode, Boolean) 이면 메서드는 즉시 차단 컬렉션을 트리거하고 컬렉션이 완료되면 반환합니다. 백그라운드 컬렉션이 진행 중이고 generation 매개 변수가 2이면 메서드는 백그라운드 컬렉션이 완료될 때까지 기다렸다가 차단 세대 2 컬렉션을 트리거한 다음 반환합니다. 수집은 가능한 한 빨리 수행됩니다. 메서드는 Collect(Int32, GCCollectionMode, Boolean) 백그라운드 컬렉션을 요청하지만 이것이 보장되지는 않습니다. 상황에 따라 차단 컬렉션이 계속 수행될 수 있습니다. 백그라운드 컬렉션이 이미 진행 중인 경우 메서드는 즉시 반환됩니다.
Optimized 가비지 수집기 및 generation 매개 변수의 상태에 따라 차단 컬렉션을 수행할 수 있습니다. 가비지 수집기는 최적의 성능을 제공하려고 합니다. 가비지 수집기의 상태에 따라 컬렉션을 수행할 수 있습니다. 메서드는 Collect(Int32, GCCollectionMode, Boolean) 백그라운드 컬렉션을 요청하지만 이것이 보장되지는 않습니다. 상황에 따라 차단 컬렉션이 계속 수행될 수 있습니다. 가비지 수집기는 최적의 성능을 제공하려고 합니다. 백그라운드 컬렉션이 이미 진행 중인 경우 메서드는 즉시 반환됩니다.

참고하십시오