2011-02-04 14 views
1

私はこれに関連する多くの質問があることを理解しています。 2つの命令でコンソールアプリケーションを作成します。大容量のリストを作成し、サンプルデータを入力してから、そのリストをクリアするか、またはnullにします。 私が知りたいのは、デバッグ中に私が知っている/測定/プロファイルする方法があるかどうかです。もしリストがクリアされ、null-edで使用された実際のメモリがリストの前と同じなら作成され、移入されました。私は、アプリケーションが情報を廃棄し、GCが収集を完了したことを確かに知っていますが、この後にアプリケーションが消費するメモリ量を確認できますか? 私は、リストを埋める過程で多くのメモリが割り当てられ、それがクリアされた後、必要であれば他のプロセスがメモリを利用できるようになるが、アプリケーションが消費する実際のメモリを終わり? ありがとう.netメモリの測定とプロファイリング

編集:OK、ここに私の実際のシナリオと目的があります。私は、大量のデータをUSBデバイスで読み取って動作するWPFアプリケーションで作業します。ある時点で、アプリケーションは約700MB以上のメモリを割り当ててすべてのListデータを格納し、解析して解析してからファイルシステムに書き込みます。ファイルシステムにデータを書き込む際には、すべてのリストをクリアし、以前は大きなデータを保持していたすべてのコレクションを破棄して、別のデータ処理を行うことができます。パフォーマンスに関する問題に遭遇したり、最終的にすべてのメモリを使い果たしたりしないことを知りたい。私のプログラムでは大量のメモリを使用しても問題ありませんが、数回のUSB処理を経てそれを使っても問題ありません。 これを制御するにはどうしたらいいですか?このような場合に、メモリまたはプロセスプロファイラが使用されていますか?タスクマネージャーを使うだけで、私のアプリケーションは800 MBのメモリを占有していますが、コレクションをクリアしてもメモリは同じままです。私は、Windowsがそれを必要としない限り下がらないことを理解しているので、メモリがクリアされ、自由に(アプリケーションやウィンドウによって)使用されることを知ることができるかどうかを知りたいですか?

答えて

2

物理メモリを意味する場合は、Windows上で「実メモリ」の使用量を測定することは非常に困難です。 - CLRプロファイラ、またはこのいずれかに記載されている他のプロファイラ - Best .NET memory and performance profiler?

  1. プロセスに割り当てるメモリの量(Zoobaの回答を参照してください)
  2. 割り当てられて管理されるメモリの量:ほとんどlikleyあなたは何か他のもののようにしたいです(1)変更は何あなたのプロセスに割り当てられたメモリのタスクマネージャは、後のガベージコレクションが終了することは必要ではないことを、あなたのアプリケーションのための

注意を報告量

  • - GCは将来のために割り当てられたメモリを保つことが配分(これを管理しますビヘイビアはメモリ全体のCLRに固有のものではありません。大部分のメモリアロケータは、何らかの方法で強制的に解放しない限り、後の使用のためにフリーブロックを保持します。 http://blogs.msdn.com/b/maoni/ブログは、GC /メモリの詳細についての優れた情報源です。

  • 2

    Process Explorerは、あなたが必要とする情報具体的には、プロセスの「プライベートバイト履歴」グラフに最も関心があるでしょう。

    また、Windowのパフォーマンスモニタを使用して特定のアプリケーションを追跡することもできます。これによりProcess Explorerに同じ情報が与えられますが、実際の数値を別のファイルに書き込むことができます。

    Process Explorer window

    (絵、私は可能性があるので...)

    1

    私は個人的にそれはあなたのメモリ使用量を確認するために使用することができ、リアルタイムのオプションを持っているSciTech Memory Profiler
    を使用しています。それは、メモリの漏れに関するいくつかの問題を見つけるのに役立っています。

    関連する問題