実行中に独自のメモリ使用量をポーリングする必要があるアプリがあります。インスタンス化された各オブジェクトのメモリ使用量を一覧表示できれば理想的です。これは WMI で実現できることはわかっていますが、WMI に依存しないものを期待していました。
5 に答える
役立つと思われる 2 つの関数は次のとおりです。
GC.GetTotalMemory();
Process.PagedMemorySize64();
私の経験では、GC.GetTotalMemory() はそれほど信頼できるものではありません。多くの場合、実際のメモリ使用量よりもはるかに少ないメモリ使用量が報告されます。16 ギガバイトのマシンでプログラムがメモリ不足になったときに、8 ギガバイトしか使用していないと報告されているのを見たことがあります。
Process.PagedMemorySize64 はまだテストしていませんが、有望に見えます。
Process proc = Process.GetCurrentProcess();
Logger.Info(proc.PeakWorkingSet64/1024 + "kb");
perfmon カウンターでリッスンできます。これにより、十分なデータが得られます (GC アクティビティ/物理メモリ使用量/マネージド ヒープなど)。
さらに深く掘り下げる必要がある場合は、おそらく自分自身にデバッガーをアタッチする必要があります。これは、新しいプロセスを生成して通信し、メモリをウォークスルーする必要があるため、非常にトリッキーです。
Process クラスである System.Diagnostics から、プロセスに関する大まかな粒度を得ることができます。 http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx。
「オブジェクトごと」のものはありませんが、プロセスに関する少なくともいくつかのメモリ情報を収集できます。
多分
Windows::System::Diagnostics::ProcessDiagnosticInfo::GetForCurrentProcess();