2016-06-11 2 views
0

Visual Studio를 사용하지 않고 프로그래밍 방식으로 GC 작업을 모니터링하려는 C# 콘솔 응용 프로그램이 있습니다. 이 코드가있는 경우 예를 들어, :C# 응용 프로그램에서 GC 작업을 프로그래밍 방식으로 모니터링하는 방법은 무엇입니까?

public static void Main() 
{ 
    for (int i = 0; i < 100000; i++) AllocateByteArray(); 
} 

private static void AllocateByteArray() 
{ 
    new byte[1000]; 
} 

루프가 실행되는 동안 가비지 콜렉션이 발생하는 횟수를 모니터링 할 GC 클래스를 사용하는 방법이 있나요? 나는 처음에이 같은 시도 :

Console.WriteLine("Before:"); 
Console.WriteLine(GC.GetTotalMemory(false)); 

// do work... 

Console.WriteLine("After:"); 
Console.WriteLine(GC.GetTotalMemory(false)); 

Console.WriteLine("After collection:"); 
Console.WriteLine(GC.GetTotalMemory(true)); 

을하지만 난 일을 한 동안 GC가 발생했을부터 측정이 정말 나에게 아무것도 얘기하지 않았다 깨달았다. .NET의 GC API에 익숙하지 않은데 이러한 유형의 통계를 프로그래밍 방식으로 측정하는 방법이 있습니까? 감사.

+0

https://msdn.microsoft.com/en-us/library/w8f5kw2e(v=vs.110).aspx –

+0

추가 GC 관련 독서 : (HTTPS [모두가 가비지 컬렉션 틀린 방법에 대해 생각] //blogs.msdn.microsoft.com/oldnewthing/20100809-00/?p=13203), [개체가 가비지 수집시기는 언제됩니까?] (https://blogs.msdn.microsoft.com/oldnewthing/20100810) -00 /? p = 13193) 그리고 아는 모든 것이 잘못되었을 때 (파트 1) (https://ericlippert.com/2015/05/18/when-everything-you-know-is-wrong-part-one/) [제 2 부] (https://ericlippert.com/2015/05/21/when-everything-you-know-is-wrong-part-two/) – theB

답변

1

내가 직접적으로 도움이 될만큼 멀리 알고 있다고 말할 수는 없지만 호기심에 대한 답변을 사냥 할 때 나는 몇 가지를 들었다. 바라건대 이러한 것들은 "Visual Studio의 도움이 필요 없다"라는 특정 비트에 비추어 볼 때 아무런 의미가 없습니다.

여기에 또 다른 스레드가 있습니다. Monitoring Garbage Collector in C#

MSDN에는 관련 문서가 있습니다. https://msdn.microsoft.com/en-us/library/ee851764(v=vs.110).aspx

가비지 수집기는 꽤 신비로운 것입니다.

1

백그라운드 가비지 수집을 수행하지 않는 경우 이벤트 기반 시스템을 사용하여 garbage collection notifications을 수신 할 수 있습니다.

RegisterForFullGCNotification 메서드는 런타임에서 전체 가비지 수집이 다가오고 있음을 감지 할 때 알림을 등록합니다. 이 알림에는 전체 가비지 수집이 다가오고 전체 가비지 수집이 완료되었을 때 두 부분이 있습니다.

참고이

만 차단 가비지 수집 알림을 인상 배경 수집을 위해 작동하지 않습니다 경고. <gcConcurrent> 구성 요소가 활성화되면 백그라운드 가비지 수집은 알림을 발생시키지 않습니다.

관련 문제