15

オブジェクトのインスタンスが使用しているメモリ量を調べる方法を知っている人はいますか?

たとえば、次のオブジェクトのインスタンスがあるとします。

TestClass tc = new TestClass();

インスタンスが使用しているメモリ量を確認する方法はありますtcか?

質問する理由は、C# にはメモリ管理が組み込まれていますが、オブジェクトのインスタンス (何かを追跡するリストなど) をクリアしないという問題によく遭遇するためです。

適度に優れたメモリ プロファイラ (ANTS プロファイラなど) がいくつかありますが、マルチスレッド環境では、これらのツールを使用しても、何がどこに属しているかを把握するのは非常に困難です。

4

3 に答える 3

7

ANTS リファレンスに基づいて想定しているコード自体でそれを実行しようとしていない場合は、CLRProfiler (現在 v2.0) を見てみてください。これは無料で、かなり単純な UI を気にしないのであれば、貴重な情報を提供してくれます。あらゆる種類の統計の詳細な概要を提供します。しばらく前に、メモリ リークを見つけるための 1 つのツールとして使用しました。

ここからダウンロード: https://github.com/MicrosoftArchive/clrprofiler

コードで実行したい場合は、CLR に使用できるプロファイリング API があります。CLRProfiler で情報が見つかった場合は、これらの API を使用しているため、コードでも実行できるはずです。詳細はこちら: http://msdn.microsoft.com/de-de/magazine/cc300553(en-us).aspx

(WinDbg を使用するほど難解ではありませんが、CLR の奥深くまで深く掘り下げる準備をしてください。)

于 2008-09-13T20:28:38.860 に答える
4

Microsoft から無料で提供されているCLR Profilerは、この種の作業に非常に適しています。

プロファイラー全体の紹介は、ここからダウンロードできます。また、Patterns & Practices チーム、プロファイラーの使用方法の詳細について少し前にまとめました。

さまざまなスレッドと、それらのスレッドで作成されたオブジェクトを表示するという点で、かなり合理的な仕事をしています。

これが光を当てることを願っています。プロファイリングをお楽しみください。

于 2008-09-13T20:31:47.807 に答える
2

私はMemProfilerで良い経験をしています。オブジェクトが作成されたときのスタック トレースと、オブジェクトがまだガベージ コレクションされていない理由のすべてのグラフを提供します。

于 2008-09-13T20:24:28.043 に答える