DA0023: 높은 GC CPU 시간DA0023: High GC CPU time

규칙 IDRule Id DA0023DA0023
범주Category .NET Framework 사용.NET Framework Usage
프로파일링 방법Profiling method 모두All
메시지Message % Time in GC가 상당히 높습니다.% Time in GC is fairly high. 이는 과다한 가비지 수집 오버헤드가 응용 프로그램의 반응성에 영향을 줄 수 있음을 나타냅니다.This indication of excessive amount of garbage collection overhead could be impacting the responsiveness of your application. .NET 메모리 할당 데이터 및 개체 수명 정보를 수집하여 응용 프로그램이 보다 효과적으로 사용하는 메모리 할당 패턴을 파악할 수 있습니다.You can gather .NET memory allocation data and object lifetime information to understand the pattern of memory allocation your application uses better.
규칙 유형Rule type 정보Informational

샘플링, .NET 메모리 또는 리소스 경합 방법을 사용하여 프로파일링할 경우 이 규칙을 트리거하려면 10개 이상의 샘플을 수집해야 합니다.When you profile by using the sampling, .NET memory, or resource contention methods, you must collect at least 10 samples to trigger this rule.

원인Cause

프로파일링 중에 수집되는 시스템 성능 데이터가 가비지 수집에 걸린 시간이 총 응용 프로그램 처리 시간에 비해 크다는 것을 나타냅니다.System performance data that is collected during profiling indicates that the amount of time that is spent in garbage collection is significant compared with the total application processing time.

규칙 설명Rule Description

Microsoft .NET CLR(공용 언어 런타임)는 가비지 수집을 사용하여 응용 프로그램에 더 이상 사용되지 않는 개체에서 메모리를 회수하는 자동 메모리 관리 메커니즘을 제공합니다.The Microsoft .NET common language run-time (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.

프로파일링 중에 수집되는 시스템 성능 데이터가 가비지 수집에 걸린 시간이 총 응용 프로그램 처리 시간에 비해 클 경우 이 규칙이 실행됩니다.This rule fires when the amount of time that is spent in garbage collection is significant compared with the total application processing time.

참고

가비지 수집에 걸린 시간이 총 응용 프로그램 처리 시간에 비해 과도할 경우 DA0024: 과도한 GC CPU 시간 경고가 이 규칙 대신 실행됩니다.When the proportion of time that is spent in garbage collection is excessive compared with the total application processing time, the DA0024: Excessive GC CPU Time warning fires instead of this rule.

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

[오류 목록] 창에서 메시지를 두 번 클릭하여 프로파일링 데이터의 표시 뷰로 이동합니다.Double-click the message in the Errors List window to navigate to the Marks View of the profiling data. .NET CLR Memory\% Time in GC 열을 찾습니다.Find the .NET CLR Memory\% Time in GC column. 다른 단계보다 관리되는 메모리 가비지 수집의 오버헤드가 더 큰 특정 프로그램 실행 단계가 있는지 확인합니다.Determine if there are specific phases of program execution where the overhead of managed memory garbage collection is heavier than other phases. % Time in GC 값을 # of Gen 0 Collections, # of Gen 1 Collections, # of Gen 2 Collections 값에서 보고된 가비지 수집 비율에 비교합니다.Compare the values of the % Time in GC value to the rate of garbage collection reported in the # of Gen 0 Collections, # of Gen 1 Collections, # of Gen 2 Collections values.

% Time in GC 값은 총 처리량에 비례하여 응용 프로그램이 가비지 수집을 수행하는 데 걸리는 시간을 보고하려고 합니다.The % Time in GC value tries to report the amount of time that an application spends performing garbage collection proportional to the total amount of processing. % Time in GC 값이 매우 높은 값을 보고하지만 과도한 가비지 수집이 원인이 아닌 상황이 있을 수 있습니다.Be aware that there are circumstances when the % Time in GC value can report a very high value, but it is not because of excessive garbage collection. % Time in GC 값이 계산되는 방법에 대한 자세한 내용은 MSDN에서 Maoni’s Weblog(Maoni의 웹 블로그)의 Difference Between Perf Data Reported by Different Tools – 4(여러 가지 도구에서 보고하는 성능 데이터 간의 차이점 – 4) 항목을 참조하세요.For more information about the way the % Time in GC value is calculated, see the Difference Between Perf Data Reported by Different Tools - 4 entry of Maoni's Weblog on MSDN. 가비 수집 중에 컴퓨터에서 우선순위가 더 높은 다른 작업이 응용 프로그램을 선점하거나 페이지 오류가 발생할 경우 % Time in GC 카운터가 추가적인 지연을 반영합니다.If page faults are occurring or the application is preempted by other higher priority work on the machine during garbage collection, the % Time in GC counter will reflect those additional delays.