DA0023: 높은 GC CPU 시간
규칙 ID |
DA0023 |
범주 |
.NET Framework 사용 |
프로파일링 방법 |
모두 |
메시지 |
% Time in GC가 상대적으로 높습니다. 이는 과다한 가비지 수집 오버헤드가 응용 프로그램의 반응성에 영향을 줄 수 있음을 나타냅니다. .NET 메모리 할당 데이터 및 개체 수명 정보를 수집하여 응용 프로그램이 보다 효과적으로 사용하는 메모리 할당 패턴을 파악할 수 있습니다. |
규칙 유형 |
정보 |
샘플링, .NET 메모리 또는 리소스 경합 방법을 사용하여 프로파일링하는 경우에는 적어도 10개의 샘플을 수집하여 이 규칙을 트리거해야 합니다.
원인
프로파일링 중 수집된 시스템 성능 데이터가 총 응용 프로그램 처리 시간에 비해 가비지 수집에 소요된 시간이 상당히 많음을 나타냅니다.
규칙 설명
Microsoft .NET CLR(공용 언어 런타임)에서는 가비지 수집기를 사용하여 응용 프로그램이 더 이상 사용하지 않는 개체에서 메모리를 회수하는 자동 메모리 관리 메커니즘을 제공합니다. 가비지 수집기는 많은 할당의 수명이 짧다는 가정에 따른 세대 기반 기능입니다. 지역 변수 등은 수명이 짧아야 합니다. 새로 만들어진 개체는 0세대(Gen 0)에서 시작된 후 가비지 수집 실행 시 수집되지 않으면 1세대로 진행되었다가 응용 프로그램이 여전히 해당 개체를 사용할 경우 마지막으로 2세대로 전환됩니다.
0세대에 있는 개체는 자주 수집되며 일반적으로 매우 효율적으로 수집됩니다. 1세대에 있는 개체는 수집되는 빈도가 적으며 덜 효율적으로 수집됩니다. 마지막으로, 2세대에 있는 수명이 긴 개체는 더 적은 빈도로 수집되어야 합니다. 완전 가비지 수집 실행인 2세대 수집은 가장 부담이 큰 작업이기도 합니다.
이 규칙은 가비지 수집에 소요된 시간이 총 응용 프로그램 처리 시간에 비해 매우 많을 때 발생합니다.
참고
가비지 수집에 소요된 시간의 비율이 총 응용 프로그램 처리 시간에 비해 지나친 경우에는 이 규칙 대신 DA0024: 과도한 GC CPU 시간 경고가 발생합니다.
경고를 조사하는 방법
오류 목록 창에서 메시지를 두 번 클릭하여 프로파일링 데이터의 표시 뷰로 이동합니다. .NET CLR Memory\% Time in GC 열을 찾습니다. 프로그램 실행 단계 중 관리되는 메모리 가비지 수집의 오버헤드가 다른 단계보다 과도한 특정 단계가 있는지 확인합니다. % Time in GC 값을 # Gen 0 Collections, # Gen 1 Collections, # Gen 2 Collections 값에 보고된 가비지 수집 비율과 비교합니다.
% Time in GC 값은 응용 프로그램에서 가비지 수집을 수행하는 데 소요된 시간을 총 처리 시간에 대한 비율로 보고합니다. % Time in GC가 매우 높은 값을 보고하지만 가비지 수집이 과도하기 때문은 아닌 경우도 있습니다. % Time in GC 값이 계산되는 방식에 대한 자세한 내용은 MSDN의 Maoni's Weblog에 있는 Difference Between Perf Data Reported by Different Tools – 4 항목을 참조하십시오. 가비지 수집 중 페이지 폴트가 발생하거나 응용 프로그램이 우선 순위가 더 높은 컴퓨터의 다른 작업에 의해 선점되는 경우 % Time in GC 카운터는 그로 인한 추가 지연 시간을 반영합니다.