0

私はいくつかのC#コードを持っています。using(){}私はコード分析を使用して、 disposeを使用していない、または呼び出していないすべての場所を見つけます。それが行われます。それでもまだ漏れています。コードは2つの関数(SetWindowPos、SetForegroundWindow)を除いてDllImportを呼び出しませんが、それらは呼び出されません(メインインスタンスはそれを使用しません。他のインスタンスは使用しますが、数秒間存続します)。

どういうわけか、このコードはリークしています。問題が何であるかを知るにはどうすればよいですか?

4

2 に答える 2

6

マネージコードのメモリリークは通常、意図しない参照によってオブジェクトがメモリに保持されていることが原因です。ここでは、イベントの担当者が一般的な犯人です。

あなたはメモリプロファイリングツールを手に入れたいと思うでしょう。JetBrainsのdotTraceRedGateのANTSもどちらも優れていますが、 SciTechの.NETメモリプロファイラーがおそらく最高です。

Microsoftには、もう少し複雑ですが、使用できる無料のプロファイリングツールCLRProfilerがあります。ガイダンスについては、ここここを参照してください。

.NET用のDRONEプロファイラーには無料の個人ライセンスがあるようですが、私自身はこのツールに精通していません。ここに、プロファイラーを使用したメモリリークの検出に関する記事があります。

Visual Studioのハイエンドバージョンには、プロファイリングツールも含まれています。MSDNには、それらの使用方法に関するドキュメントが含まれています。

于 2012-04-18T02:31:18.107 に答える
1

Visual Studio(PremiumおよびUltimate)に組み込まれているプロファイラーを使用してアプリケーションをプロファイリングするか、ANTSなどのツールに投資します。

于 2012-04-18T02:27:32.637 に答える