我正在調試內存泄漏。我無法複製它,但是當程序在特定情況下運行時,我會以約60MB /小時的速度獲得穩定的泄漏。幾天後,當堆爲〜2GB並附加WinDbg時,我會進行轉儲。WinDbg - 看着System.Web.Compilation.BuildManager的ResultCache
!heapdump -stat
顯示有1.2GB的哈希表。 這大約是55%的堆。
!dumpheap -Type System.Collections.Hashtable + KeyCollection
給出153,080個Hashtable實例的地址。
!這些實例中的少數幾個的gcroot表明它們全都屬於Me.Logger擁有的Threads。
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的內容?