2009-05-15 6 views
3

メモリリークのある大規模な.NET C#アプリケーションがあります。 antsメモリプロファイラを使用すると、同じユーザーコントロールの複数のバージョンがメモリにあり、ガベージコレクタがメモリを収集していないことがわかります。 Webフォームには出力キャッシュがありますが、実際のユーザーコントロールには出力キャッシュはありません。Gargabe Collectorでユーザーコントロールが収集されないのはなぜですか?

ユーザーコントロールが処分されていない理由はありますか?

ガベージコレクタによって廃棄されない理由と原因を特定するにはどうすればよいですか。

答えて

0

誰かがそれに少なくとも一つの参照を保持している場合、基本的にオブジェクトが収集されません。参照を保持している人を見つけて見つけてください。 ANTSプロファイラまたは.NETメモリプロファイラ(SciTech)は、優れた見識を提供します。

1

ユーザーコントロールがガベージコレクションされない理由はたくさんあります。コード自体を見て、実際に処分していないIDisposableを実装するオブジェクト(レコードセットなど)をインスタンス化していますか?

0

ページで出力キャッシュが有効になっている場合は、すべての子コントロールもキャッシュされます。メモリ内に複数のコントロールが残っている限り、メモリを節約するのに役立つ部分ページキャッシュを使用して、このページにいくつかの戦略を読み込んでください。

http://msdn.microsoft.com/en-us/library/k4he1ds5(VS.71).aspx

関連する問題