대부분의 경우 가비지 수집기는 컬렉션을 수행하는 데 가장 적합한 시간을 결정할 수 있으며 독립적으로 실행하도록 해야 합니다. 강제 컬렉션이 애플리케이션의 성능을 향상시킬 수 있는 경우는 드물다. 이러한 경우, 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) 호출하여 유도된 컬렉션이 차단되는지 여부를 지정할 수 있습니다. 수행되는 컬렉션의 형식은 메서드 mode 와 blocking 매개 변수의 조합에 따라 달라집니다.
mode 는 열거형의 GCCollectionMode 멤버이며 blocking 값입니다 Boolean . 다음 표는 mode 및 blocking 인수의 상호 작용을 요약합니다.
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) 백그라운드 컬렉션을 요청하지만 이것이 보장되지는 않습니다. 상황에 따라 차단 컬렉션이 계속 수행될 수 있습니다. 가비지 수집기는 최적의 성능을 제공하려고 합니다. 백그라운드 컬렉션이 이미 진행 중인 경우 메서드는 즉시 반환됩니다. |
참고하십시오
.NET