メモリリークをデバッグしています。私はそれを再現することはできませんが、プログラムが特定の状況で実行されると、約60MB /時で安定したリークが発生します。数日後、ヒープが〜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が構築したものはどうすればわかりますか?