DA0005: GC2 컬렉션이 많습니다.DA0005: Frequent GC2 collections

RuleIdRuleId DA0005DA0005
범주Category .NET Framework 사용.NET Framework Usage
프로파일링 방법Profiling method .NET 메모리.NET Memory
메시지Message 대부분의 개체는 2세대 가비지 수집에서 수집됩니다.Many of your objects are being collected in generation 2 garbage collection.
메시지 유형Message type 경고Warning

원인Cause

많은 .NET 메모리 개체가 2세대 가비지 수집에서 회수됩니다.A high number of .NET memory objects are being reclaimed in generation 2 garbage collection.

규칙 설명Rule Description

Microsoft .NET CLR(공용 언어 런타임)은 가비지 수집기를 사용하여 응용 프로그램에 더 이상 사용되지 않는 개체에서 메모리를 회수하는 자동 메모리 관리 메커니즘을 제공합니다.The Microsoft .NET common language runtime (CLR) provides an automatic memory management mechanism that uses a garbage collector to reclaim memory from objects that the application no longer uses. 가비지 수집기는 많은 할당이 단기 유지된다는 가정 하에 세대를 기준으로 합니다.The garbage collector is generation-oriented, based on the assumption that many allocations are short-lived. 예를 들어 로컬 변수는 단기 유지되어야 합니다.Local variables, for example, should be short-lived. 새로 만들어진 개체는 0세대(gen 0)에서 시작되고, 가비지 수집 실행에서 생존하면 1세대로 이동하고, 응용 프로그램에 계속 사용될 경우 마지막으로 2세대로 전환됩니다.Newly created objects start in generation 0 (gen 0), and then they progress to generation 1 when they survive a garbage collection run, and finally transition to generation 2 if the application still uses them.

0세대의 개체는 빈번하게, 보통 매우 효율적으로 수집됩니다.Objects in generation 0 are collected frequently and usually very efficiently. 1세대의 개체는 덜 빈번하게, 덜 효율적으로 수집됩니다.Objects in generation 1 are collected less frequently and less efficiently. 마지막으로 2세대의 장기 유지 개체는 훨씬 덜 빈번하게 수집되어야 합니다.Finally, long-lived objects in generation 2 should be collected even less frequently. 전체 가비지 수집 실행을 나타내는 2세대 수집은 가장 부담이 큰 작업이기도 합니다.Generation 2 collection, which is a full garbage collection run, is also the most expensive operation.

2세대 수집이 상대적으로 너무 많이 발생한 경우 이 규칙이 실행됩니다.This rule fires when proportionally too many generation 2 garbage collections have occurred. 너무 많은 상대적 단기 유지 개체가 1세대 수집에서 생존하지만 2세대 전체 수집에서 이를 수집할 수 있다면 메모리 관리 비용이 쉽게 과도해질 수 있습니다.If too many relatively short-lived objects survive generation 1 collection but are then able to be collected in a generation 2 full collection, the cost of memory management can easily become excessive. 자세한 내용은 MSDN 웹 사이트의 Rico Mariani의 Performance Tidbits에서 Mid-life crisis(중간 수명의 위기) 게시물을 참조하세요.For more information, see the Mid-life crisis post on the Rico Mariani's Performance Tidbits on the MSDN Web site.

경고를 조사하는 방법How to Investigate a Warning

.NET 메모리 데이터 뷰 보고서를 검토하여 응용 프로그램의 메모리 할당 패턴을 파악합니다.Review the .NET Memory Data Views reports to understand the application's pattern of memory allocation. 개체 수명 뷰를 사용하여 프로그램의 어떤 데이터 개체가 2세대로 생존하고 2세대에서 회수되는지 확인합니다.Use the Object Lifetime View to determine which of the program's data objects are surviving into generation 2 and then being reclaimed from there. 할당 뷰를 사용하여 이러한 할당이 시작된 실행 경로를 확인합니다.Use the Allocations View to determine the execution path that resulted in these allocations.

가비지 수집 성능 향상 방법에 대한 자세한 내용은 Microsoft 웹 사이트에서 가비지 수집기 기본 및 성능 힌트를 참조하세요.For information about how to improve garbage collection performance, see Garbage Collector Basics and Performance Hints on the Microsoft Web site. 자동 가비지 수집의 오버헤드에 대한 자세한 내용은 Large Object Heap Uncovered(대형 개체 힙 살펴보기)를 참조하세요.For information about the overhead of automatic garbage collection, see Large Object Heap Uncovered.