인덱싱된 컬렉션Induced Collections

대부분의 경우 가비지 수집기가 수집을 수행할 적절한 시기를 결정할 수 있으며 가비지 수집기가 독립적으로 실행되는 것이 좋습니다.In most cases, the garbage collector can determine the best time to perform a collection, and you should let it run independently. 강제된 컬렉션이 애플리케이션의 성능을 향상시키는 드문 경우도 있습니다.There are rare situations when a forced collection might improve your application's performance. 이러한 경우에 가비지 수집을 강제하는 GC.Collect 메서드를 사용하여 가비지 수집을 유도할 수 있습니다.In these cases, you can induce garbage collection by using the GC.Collect method to force a garbage collection.

애플리케이션 코드의 특정 지점에서 사용되는 메모리양이 상당히 감소하는 경우 GC.Collect 메서드를 사용합니다.Use the GC.Collect method when there is a significant reduction in the amount of memory being used at a specific point in your application's code. 예를 들어 애플리케이션이 몇 가지 컨트롤이 있는 복잡한 대화 상자를 사용하는 경우 대화 상자를 닫을 때 Collect를 호출하면 즉시 대화 상자에서 사용하는 메모리를 확보하여 성능을 개선할 수 있습니다.For example, if your application uses a complex dialog box that has several controls, calling Collect when the dialog box is closed could improve performance by immediately reclaiming the memory used by the dialog box. 가비지 수집기가 최적이 아닌 시간에 개체를 회수하려고 하는 경우 성능이 저하될 수 있기 때문에 애플리케이션이 너무 자주 가비지 수집을 발생시키지 않도록 합니다.Be sure that your application is not inducing garbage collection too frequently, because that can decrease performance if the garbage collector is trying to reclaim objects at non-optimal times. 다음 섹션에서 설명된 대로 GCCollectionMode.Optimized 열거형 값을 Collect 메서드에 제공하여 수집의 생산성이 높은 경우에만 수집할 수 있습니다.You can supply a GCCollectionMode.Optimized enumeration value to the Collect method to collect only when collection would be productive, as discussed in the next section.

GC 컬렉션 모드GC collection mode

다음과 같이 GCCollectionMode 값을 포함하는 GC.Collect 메서드 오버로드 중 하나를 사용하여 강제된 컬렉션에 대한 동작을 지정할 수 있습니다.You can use one of the GC.Collect method overloads that includes a GCCollectionMode value to specify the behavior for a forced collection as follows.

GCCollectionModeGCCollectionMode value 설명Description
Default 실행 중인 버전의 .NET에 대한 기본 가비지 수집 설정을 사용합니다.Uses the default garbage collection setting for the running version of .NET.
Forced 가비지 수집이 즉시 실행되도록 강제합니다.Forces garbage collection to occur immediately. 이는 GC.Collect() 오버로드를 호출하는 것과 같습니다.This is equivalent to calling the GC.Collect() overload. 모든 세대의 전체 차단 컬렉션에서 발생합니다.It results in a full blocking collection of all generations.

또한 즉각적인 전체 차단 가비지 수집을 적용하기 전에 GCSettings.LargeObjectHeapCompactionMode 속성을 GCLargeObjectHeapCompactionMode.CompactOnce로 설정하여 대형 개체 힙을 압축할 수 있습니다.You can also compact the large object heap by setting the GCSettings.LargeObjectHeapCompactionMode property to GCLargeObjectHeapCompactionMode.CompactOnce before forcing an immediate full blocking garbage collection.
Optimized 가비지 수집기는 현재 시간이 개체를 회수하기 위한 최적 시간인지 확인할 수 있습니다.Enables the garbage collector to determine whether the current time is optimal to reclaim objects.

가비지 수집기는 컬렉션이 정당화될 만큼 생산적이지 않다는 것을 결정할 수 있습니다. 이 경우에 개체를 회수하지 않고 반환합니다.The garbage collector could determine that a collection would not be productive enough to be justified, in which case it will return without reclaiming objects.

배경 또는 차단 컬렉션Background or blocking collections

GC.Collect(Int32, GCCollectionMode, Boolean) 메서드 오버로드를 호출하여 유도한 컬렉션이 차단인지 여부를 지정할 수 있습니다.You can call the GC.Collect(Int32, GCCollectionMode, Boolean) method overload to specify whether an induced collection is blocking or not. 수행된 컬렉션의 유형은 메서드의 modeblocking 매개 변수의 조합에 따라 달라집니다.The type of collection performed depends on a combination of the method's mode and blocking parameters. modeGCCollectionMode 열거형의 멤버이며, blockingBoolean 값입니다.mode is a member of the GCCollectionMode enumeration, and blocking is a Boolean value. 다음 표에서는 modeblocking 인수의 상호 작용을 간략히 설명합니다.The following table summarizes the interaction of the mode and blocking arguments.

mode blocking = true blocking = false
Forced 또는 DefaultForced or Default 차단 컬렉션은 가능한 한 빨리 수행됩니다.A blocking collection is performed as soon as possible. 백그라운드 컬렉션이 진행 중이고 세대가 0 또는 1인 경우 Collect(Int32, GCCollectionMode, Boolean) 메서드는 차단 컬렉션을 즉시 트리거하고 컬렉션이 완료될 때 반환합니다.If a background collection is in progress and generation is 0 or 1, the Collect(Int32, GCCollectionMode, Boolean) method immediately triggers a blocking collection and returns when the collection is finished. 백그라운드 컬렉션이 진행 중이고 generation 매개 변수가 2인 경우 메서드는 백그라운드 컬렉션이 완료될 때까지 대기하고 세대 2 컬렉션을 트리거한 후 반환합니다.If a background collection is in progress and the generation parameter is 2, the method waits until the background collection is finished, triggers a blocking generation 2 collection, and then returns. 컬렉션은 가능한 한 빨리 수행됩니다.A collection is performed as soon as possible. Collect(Int32, GCCollectionMode, Boolean) 메서드는 백그라운드 컬렉션을 요청하지만 이 작업이 항상 수행되지는 않으며 상황에 따라 차단 컬렉션이 계속 수행될 수도 있습니다.The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. 백그라운드 컬렉션이 이미 진행 중인 경우 메서드가 즉시 반환됩니다.If a background collection is already in progress, the method returns immediately.
Optimized 차단 컬렉션은 가비지 수집기의 상태와 generation 매개 변수에 따라 수행될 수 있습니다.A blocking collection may be performed, depending on the state of the garbage collector and the generation parameter. 가비지 수집기는 최적의 성능을 제공하려고 합니다.The garbage collector tries to provide optimal performance. 가비지 수집기의 상태에 따라 컬렉션이 수행될 수 있습니다.A collection may be performed, depending on the state of the garbage collector. Collect(Int32, GCCollectionMode, Boolean) 메서드는 백그라운드 컬렉션을 요청하지만 이 작업이 항상 수행되지는 않으며 상황에 따라 차단 컬렉션이 계속 수행될 수도 있습니다.The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. 가비지 수집기는 최적의 성능을 제공하려고 합니다.The garbage collector tries to provide optimal performance. 백그라운드 컬렉션이 이미 진행 중인 경우 메서드가 즉시 반환됩니다.If a background collection is already in progress, the method returns immediately.

참고 항목See also