現在、dbghelpライブラリを使用して、( GetThreadContext()およびStackWalk64( )を使用して) プロセスのスレッドのスタックをウォークスルーし、各フレームに含まれる戻りアドレスのみを収集します。
ただし、そのオーバーヘッドはシステムの要求に対して大きすぎます。全体の時間は apx です。スタック ウォークごとに 5 ミリ秒 (10 ~ 15 フレーム)。この時間には、GetThreadContext() と、StackWalk64() を呼び出してすべてのフレームを取得するループが含まれます。
とにかく、もっと速くする方法を見つけなければなりません。誰でもどうすればそれができるか考えていますか?
編集:
ETW (Event Tracing for Windows) メカニズムを知っている人はいますか?
その場合、特定の期間に発生したすべてのコンテキスト スイッチを追跡するにはどうすればよいですか? 各コンテキスト スイッチでイベントを発行するイベント プロバイダーはありますか?