私は、操作を実行する外部プロセスによって使用される時間とメモリを測定するベンチマーク ツールに取り組んでいます。私は主にページング可能メモリのピーク サイズ (別名 PageFileBytesPeak パフォーマンス カウンター / Process.PeakPagedMemorySize64 / ピーク プライベート バイト) に関心があります。これは .NET プロジェクトであるため、純粋な .NET ソリューションが望ましいですが、これはおそらく不可能です。
ここでの問題は、プロセスが終了する前にピーク時のメモリ使用量がわからないことです。プロセスが存在しない場合、そのプロセスのパフォーマンス カウンターを読み取ることができません。そのため、プロセスの実行中に代わりにポーリングすることができます。
ただし、ポーリングの頻度が高すぎると、プロセスが作業を完了するのにかかる時間に干渉するため、これは好ましくありません。また、ポーリングの頻度が低すぎると、結果が正確ではなくなります (プロセスがメモリ使用量のピークに達する可能性が高くなります)。出る直前)。したがって、これまでに思いついたソリューションよりもハックしにくい、確実に行う方法があることを願っています。
- DLL をプロセスに挿入し、DLL_PROCESS_DETACH の IPC メカニズムを介して値を報告します。
- ターゲット プロセスの ExitProcess にパッチ/フックを適用し、実際の ExitProcess を実行する前に IPC メカニズムを介して値を報告します。
- デバッガーのふりをして、EXIT_PROCESS_DEBUG_EVENT の値を測定します (プロセスは、ContinueDebugEvent が呼び出される前にカーネルによってクリーンアップされません)。