p/invoke について学習している間、システム dll を介して情報を照会しているため、.net メソッドを使用する場合と比較して、いくつかの顕著なパフォーマンスの向上が見られました。
たとえば、このコードでdllをインポートすることにより
[DllImport("psapi.dll", SetLastError = true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS Memcounters, int size);
問題のプロセスに関する情報にアクセスできたので、そのプロセスのメモリ使用量について知る必要があるすべての質問をすることができました。
しかし、そのリンク The Win32_PerfFormattedData_PerfProc_ProcessとWin32_PerfRawData_PerfProc_Processで指摘できるように、P/invoke で使用されていないクラスにアクセスして、非常に具体的な情報を照会できるようです。
uint64 IODataOperationsPerSec;
uint64 IOOtherOperationsPerSec;
uint64 IOReadBytesPerSec;
uint64 IOReadOperationsPerSec;
uint64 IOWriteBytesPerSec;
uint64 IOWriteOperationsPerSec;
uint64 IODataBytesPerSec;
uint64 IOOtherBytesPerSec;
uint32 PageFaultsPerSec;
uint64 PageFileBytes;
uint64 PageFileBytesPeak;
ご覧のとおり、32bit / 64bitプロセスの両方に分離された機能もあります
ここで、クエリする必要があるものを正確に取得していることを確実に知ることができ、そのクラスを介して必要なものをすべて取得できることに気付きました。まさにそれを探していました.1については、32ビットタスクと64ビットタスクを正しくクエリしていることを確実に知っているでしょう.2つのカウンターはすべて1つのクラスにまとめられてI/O
いCPU Time
ますMemory usage
. .net アプローチを使用する場合と比較して利益が得られます。
質問は次のとおりです。
P/invoke のようなメソッドを使用してそのクラスにアクセスするにはどうすればよいですか?
実際、マネージド .net のカウンターに関して詳細に見つけた最も興味深いリンクはThis Linkです。これは上記の win32 リンクと同等だと思います。