메모리 누수를 디버깅하고 있습니다. 나는 그것을 재현 할 수는 없지만 프로그램이 특정 상황에서 실행될 때 약 60MB/hr의 일정한 누수가 발생합니다. 며칠 후, 힙이 ~ 2GB이고 WinDbg를 연결할 때 덤프를합니다.WinDbg - System.Web.Compilation.BuildManager의 ResultCache를보고
! heapdump -stat
1.2GB 상당의 Hashtables가 있습니다. 이것은 힙의 약 55 %입니다.
! dumpheap -Type System.Collections.Hashtable + KeyCollection
153,080 개의 Hashtable 인스턴스의 주소를 제공합니다.
! 이러한 인스턴스 중 일부 gcroot는 모두 Me.Logger 소유의 스레드가 소유하고 있음을 나타냅니다.
RSP:28f67e840:Root:0000000245edb7d0(Me.Logger)->
0000000245edb9d8(System.Threading.Thread)->
00000002459b9830(System.Runtime.Remoting.Contexts.Context)->
00000002459b9548(System.AppDomain)->
0000000245a1fed0(System.ResolveEventHandler)->
00000002259697a0(System.Web.Compilation.BuildManager)->
0000000245a20120(System.Web.Compilation.MemoryBuildResultCache)->
00000002459c2a48(System.Web.Caching.CacheMultiple)->
00000002459c2a70(System.Object[])->
00000002459c7e08(System.Web.Caching.CacheSingle)->
00000002459c9008(System.Web.Caching.CacheUsage)->
00000002459c9030(System.Object[])->
00000002459c9138(System.Web.Caching.UsageBucket)->
00000001b996fba8(System.Web.Caching.UsagePage[])->
00000001ae054388(System.Web.Caching.UsageEntry[])->
0000000251576590(System.Web.Caching.CacheEntry)->
00000002515761a0(System.Web.Mobile.MobileCapabilities)->
00000002515742c8(System.Collections.Hashtable)->
0000000251576548(System.Collections.Hashtable+KeyCollection)
이 출력을 해석하는 방법을 모르겠습니다. System.Web.Compilation.BuildManager에는 막대한 캐시가있는 것 같습니다.
BuildManager, MobileCapabilities, ResolveEventHandler - 내 코드베이스에서이 중 하나를 사용하지 않습니다.
저는 WinDbg를 처음 사용합니다. 어떻게 디버깅을 더합니까?
해시 테이블에 무엇이 있는지 어떻게 볼 수 있습니까? (SoS v2.0.50727 아니요! DumpCollection). BuildManager가 빌드 한 것을 어떻게 볼 수 있습니까?