2012-03-23 4 views
1

.NET 응용 프로그램에서는 GC의 현재 %를 쉽게 표시 할 수 있지만 GC의 평균 시간이나 GC의 이벤트 총 시간을 표시하여 전체 시나리오를 살펴보고 측정 할 수있는 방법은 무엇입니까? 너 정말 개량 된거야 ??GC의 평균 시간

는 GC에서

% 시간은 다음과 같이 정의된다.

"마지막 가비지 수집주기 이후 가비지 수집을 수행하는 소요 된 경과 시간의 백분율을 표시 GC에서 %의 시간이 카운터는 일반적으로 수행 된 작업을 나타냅니다 응용 프로그램을 대신하여 메모리를 수집하고 압축하는 가비지 수집기이 카운터는 모든 가비지 수집의 끝에 만 업데이트되며이 카운터는 평균이 아니며 그 값은 마지막으로 관찰 된 값을 반영합니다.

답변

2

GC에서 보낸 경과 시간을 측정하고 싶다면 ETW를 통해 해당 데이터를 사용할 수 있습니다. PerfMonitor가 해당 데이터를 수집하고 표시합니다.이 MSDN Magazine 기사에서 소개 : http://msdn.microsoft.com/en-us/magazine/gg490356.aspx을 확인하십시오.

2

GC는 비 결정적입니다. 따라서 애플리케이션을 실행하는 시간과 각 세대의 크기에 따라 결과가 달라지기 때문에 최적화하기가 어렵습니다.

더 쉬운 접근법은 정직한 방법보다 훨씬 신뢰할 수 있습니다. 특정 방법으로 만드는 개체의 수를 계산하는 것입니다. 루프에 객체를 만들지 않는 것과 같은 모범 사례는 도움이 될 것입니다.

+1

합리적인 선택은 수집 할 쓰레기를 줄이는 것입니다. –

1

일부 Visual Studio 버전에는 프로파일 러가 내장되어 있습니다. 타사 프로파일 러, 무료 및 비용이 소요되는 프로파일 러도 있습니다. 프로필러는 GC에서 소비하는 시간 비율을 보여줍니다.

EDIT GC 스레드를 포함하여 이전 스레드에서 소비 한 CPU 시간에 대해 몇 가지 일반적인 오해가 있습니다. 예를 들어 GC 스레드가 사용하는 동기화 개체에 대해 잠글 수 있습니다. 이 경우 GC는 대기 상태가되지만 측정 가능한 CPU 시간은 발생하지 않습니다. 이러한 시나리오는 적절한 툴링 없이는 검사하기가 어렵습니다.

+0

사실 총 시간이 필요합니다. 프로세스 탐색기는 총 시간이 아닌 GC에서 % 시간을 보여줍니다. ( – pablo

+0

@pablo 내 프로파일을 보시기 바랍니다 .WS 프로파일 러가 Windows API보다 직접 작업하는 것이 더 즐겁습니다. – GregC