2

私の場合、64ビットWindows 7で実行されている32ビットプロセスの現在のメモリ使用量を取得するためにこのメソッドを使用する方法について、SOで多くの参照を見つけました。私のコードは

System.Diagnostics.Process[] processes =
    System.Diagnostics.Process.GetProcessesByName("ProcessName");
if (processes.Count() != 1)
{
    throw exception here, only one instance allowed;
}

System.Diagnostics.Process process = processes[0];
memoryUsed = process.WorkingSet64 / (1024f * 1024f);

私のアプリケーションは、ヒープ メモリを動的に割り当てて解放します。これは、標準の Windows タスク マネージャーで確認できます。ただし、上記のコードを呼び出すたびに、取得された使用済みメモリは常に以前のカウントよりも多くなります。また、TaskManager とは一致しません。タスク マネージャーによると、プログラムで取得した 280 MB に対して、約 249 MB です。

私は何かばかげたことをしていますか?

4

2 に答える 2

3

見る:

Process.WorkingSet64

備考:

このプロパティによって返される値は、プロセスによって使用されるワーキング セット メモリの現在のサイズを表します。

Windows Task Manager Processesタブに表示されるデフォルトのメモリ列はMemory (Private Working Set)

タスク マネージャーのメモリ列は何を意味しますか?

メモリ - プライベート ワーキング セット

プロセスが使用し、他のプロセスと共有できないメモリの量を具体的に説明するワーキング セットのサブセット。

つまり、完全なワーキング セットが必要な場合は、Resource Monitor.

perfmon.exe /res

于 2013-05-06T15:38:42.023 に答える