2011-02-07 12 views
2

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

答えて

0

SOSEX拡張機能を試しましたか? http://www.stevestechspot.com/default.aspx。 それは、!DumpCollection(それはCLRのV2で動作する場合、私はテストしていないが)必要なコマンドと、おそらくいくつかの他の有用なものを含むSOSのほとんどの機能を持っている...多分また

このブログあなたに役立つことがあります、彼女は管理されたメモリリークのデバッグに関するかなり良い情報を持っています:

http://blogs.msdn.com/b/tess/archive/2008/04/03/net-debugging-demos-lab-7-memory-leak-review.aspx?PageIndex=1

関連する問題