現在、ETW トレース機能を介して NT Kernel Logger を使用するアプリケーションを作成しています。リアルタイムモードで消費します。Windows 7 テスト マシンでは問題なく動作しますが、XP VM では定期的にメモリ不足の例外が発生していました。
APIMonitor (素晴らしいツール) を使用して、ProcessTrace() Win32 API 呼び出し自体を使用した NtAllocateVirtualMemory() への呼び出しまで追跡しました。スクリーンショットでわかるように、1GB の連続したメモリを割り当てようとしています。
誰もこれに遭遇したことがありますか?なぜそんなに多くのメモリを割り当てる必要があるのか わかりません。さらに、文書化されていない Win32 API 関数 (WmiMofEnumerateResourcesA()) の ProcessTrace() コール スタックの奥深くで呼び出しが発生しているため、実際に影響を与えることはできないようです。誰もこれに遭遇したことがありますか?潜在的な解決策をいただければ幸いです。
XP/2003 をサポートする必要がありますが、32 ビット バージョンでは、1 GB の連続したメモリが利用できるとは本当に想定できません。リアルタイム処理も必要です。ただし、可能であれば、.ETL ファイルに追加された新しいイベントを「リアルタイム」で処理するなど、イベントの損失を伴わないファイル ベースのログ記録を使用する回避策を検討できます。