2016-09-28 3 views
0

GC 및 ProcessMemory의 다음과 같은 동작이 있습니다. GarbageCollections을 분석하는 방법 내 wpf 응용 프로그램에서

enter image description here

은 처음 10 초입니다. 그리고 당신이 볼 수 있듯이 나는 GC에 대한 많은 호출을 가지고있다. 나에게는 시작시 생성되지만 프로그램에서 실제로 필요하지 않은 많은 작은 객체가있는 것처럼 보입니다. 어떤 일이 발생했는지 또는이 동작이 정상적인 것으로 분석 할 수 있습니까?

+0

만큼이 덩어리를하지 않습니다로 일반 IO 성능 (하지만 : 6백50메가바이트 프로세스 메모리) 당신이 그것을 무시 할 수 있습니다. 이 소프트웨어는 이미 매우 복잡해 보입니다. GC의 양은 건강 해 보입니다. 명백한 문제가없는 한, 당신은 그것을 그렇게 유지하고 싶어 할 것입니다. –

+0

제 생각에는 응용 프로그램을 시작하는 데 많은 시간이 걸리며 질문은 GC에 얼마나 많은 시간이 소요 되었습니까? – GreenEyedAndy

+1

그런 다음 유효한 관심사가 있습니다. 시간이 걸리는 것을 볼 수 없습니다 (지금 30 초 이상 가정). 여기에서 시작하십시오 : https://msdn.microsoft.com/en-us/library/ff650691.aspx –

답변

0

전체 가비지 수집은 매우 비쌉니다. .NET Framework는 생성 0, 1 및 2와 같이 3 가지 부분 컬렉션을 사용합니다. 세대 0 가비지 수집은 가장 빈번하고 생성 1은 적습니다. 생성 2는 가장 자주 발생하지 않습니다. . 가비지 콜렉터 콜렉션의 수는 일반적으로 문제가 아니며, 가비지 콜렉터에 의해 결정되고 최적화되며 간과해서는 안됩니다. 1 세대 당 많은 수의 0 세대 콜렉션이있을 수 있으며, 1 세대 및 2 세대와 동일합니다. 이것이 작동하는 방법입니다.

많은 개체가 낮은 세대 컬렉션에서 살아남아 더 높은 개체로 승격됩니다. 예를 들어 많은 IDisposable 유형을 사용합니다. 세대 0 컬렉션에서 IDisposable은 수집되지 않고 대신 생성 1 컬렉션 (Dispose()을 수집하기 전에 실행해야 함)으로 표시됩니다. 1 세대 컬렉션은 빈번하지 않으므로 많은 세대의 객체가 0 세대 컬렉션에서 살아남는 것을 원하지 않습니다. 마찬가지로 제 1 세대 객체가 제 2 세대 객체로 승격되는 것을 원하지 않는다.

Windows 성능 모니터를 사용하여 가비지 수집기 실행 비율을 확인할 수 있습니다. 성능 변환기는 .NET CLR 메모리 섹션에 있습니다.

PerformanceMonitorGCCounters

관련 문제