5

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_ProcessWin32_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/OCPU TimeますMemory usage. .net アプローチを使用する場合と比較して利益が得られます。

質問次のとおりです。

P/invoke のようなメソッドを使用してそのクラスにアクセスするにはどうすればよいですか?

実際、マネージド .net のカウンターに関して詳細に見つけた最も興味深いリンクはThis Linkです。これは上記の win32 リンクと同等だと思います。

4

1 に答える 1

0

前回 P/Invoke を使用したときは、マネージ C++ ライブラリで実現し、それを自分の c# アプリにインポートする方がはるかに簡単でした。C++ を知っていれば、この種の操作に関して多くの問題を回避できます。

于 2013-09-17T10:29:02.347 に答える