0

Windows WPF C ++ / C#64ビットアプリのパフォーマンスの問題を探しています。デバッガー(デバッグヒープでの実行を含む)で実行すると、アプリが非常に遅くなり、クリックごとに応答するのに数秒かかることがあります。遅い期間中、MSVSプロファイラーはUMThunkStubAMD64を最も多くの作業を実行する関数として報告します(25%の排他的サンプル)。名前は、64ビットアプリコードから32ビットOSコードを呼び出すための、ある種のアダプター/ラッパー関数のように聞こえますが、ヒープ状態のチェックなど、より多くの作業を行っているのではないかと思います。

UMThunkStubAMD64とは何ですか?そのパフォーマンスに影響を与える要因はありますか?

4

1 に答える 1

1

UMThunkStubAMD64ネイティブコードからマネージコードへの移行を処理するサンクです。

サンプルの25%がこのサンクに含まれている場合、プロファイラーはネイティブコードのみをプロファイリングしている可能性があります。その場合、マネージコードの実行中に取得されたサンプルは、スタックの最後のネイティブフレームのバケットに表示されます。これは、マネージサンクのネイティブになります。したがって、25%は、実行時間の(おおよそ)25%がマネージコードの実行に費やされることを意味します。

サンク自体は非常に高速である必要があります。ネイティブコードとマネージコード間の移行は無料ではありませんが、プログラムも25%を費やしてはなりません。移行に膨大な時間を費やした不自然な例を思いつくことは可能かもしれませんが、実際のコードでそのようなシナリオに遭遇する可能性は非常に低いと思います。

于 2012-07-24T17:12:38.950 に答える