6

C#アプリケーションで使用されている合計メモリを取得するにはどうすればよいですか?私が試したのは、GC.GetTotalMemory()Process.GetCurrentProcess()。PrivateMemorySize、PrivateMemorySize64、VirtualMemorySize、VMS64、PagedMSです。

彼らはさまざまな値を報告しますが、それは問題ありません。ただし、これらの値は、タスクマネージャーに表示される値とは異なります。

私はWindows8を使用していますが、タスクマネージャーでは、アプリケーション名のほかに、すべてのアプリで使用されているリソースが右側に個別に表示されます。マイアプリケーションの現在のメモリも表示されます。それが18.9MBであり、GC.Collect()を強制すると、約9MBに低下するとします。

現在、GC.Collect()の前:PrivateMemorySizeとPMS64は両方とも〜42(MBに変換した後)を報告し、GetTotalMemory()は〜3 PagedMSを提供し、PagedMS64は〜379を提供します

GC.Collect()の後:PrivateMemorySizeとPMS64は両方とも〜39(MBに変換した後)を報告し、GetTotalMemory()は〜1 PagedMSを提供し、PagedMS64は〜367を提供します

ただし、これらはタスクマネージャの表示とは異なります。私が欲しいのは「18.9」と「9」です。Windows8タスクマネージャーによって報告されたアプリケーションのメモリ使用量。コードビハインドを使用してこれを行うにはどうすればよいですか?.Net 4.0、VisualStudio2012を使用しています

4

1 に答える 1

3

taskmgr が行うことを再現しようとはしませんが、論理的に意味のある数字を使用します。おそらく、それはプライベート バイトです (もちろん、64 ビット バージョンを使用してください)。プライベート バイトは、実際に使用されていて、他のプロセスと共有されていないバイトです。

複数のプロセスがいくつかのページを共有するとすぐにメモリ使用量が解釈されるため、完全なメモリ番号はありません (Windows でも Linux でも)。

ただし、プライベート バイトはほとんどのアプリに適しています。

更新: Windows 8 のタスク マネージャーには、ワーキング セットのプライベート バイトが表示されます。これは、使用するにはひどいメトリックです。このアプリのメモリが現在 RAM にどれだけあるかを示します。これは、実際のメモリ使用量よりもはるかに少ない場合があります。このプロセスが終了した場合に解放されるメモリの量はわかりません。

于 2013-02-06T10:14:15.687 に答える