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의 Difference Between Perf Data Reported by Different Tools – 4 에 있는 Maoni's Weblog 항목을 참조하십시오.가비지 수집 중 페이지 폴트가 발생하거나 응용 프로그램이 우선 순위가 더 높은 컴퓨터의 다른 작업에 의해 선점되는 경우 % Time in GC 카운터는 그로 인한 추가 지연 시간을 반영합니다.