私はマルチスレッドのC++アプリケーションのプロファイリングにVisual Studioを使用しています。 私がSamplingメソッドについて読んだことから、特定の間隔でプロセッサがどの機能が実行されているかを調べることが分かります。マルチスレッドコードのプロファイリングサンプリングの仕組み
マルチスレッドコードの処理方法が不思議です。 2つ以上の関数が異なるコア上の異なるスレッドで同時に実行される可能性があります。その場合、両方の機能のサンプリング方法インクリメントカウンタはありますか?私はこれが実際に起こっていると信じています。
これは実際にそれが困難なプロファイリングレポートのうちの洞察を導出することができます。収集されたサンプルの数が最も多い関数は、ワーカースレッド上で実行されている場合、別のコア(メインスレッド以外)で実行されている可能性があり、アプリケーションのパフォーマンスにまったく影響を与えません。しかし、作業を実行するためにメインスレッドを切り替える場合は、パフォーマンスに目に見える影響があります。
マルチスレッドコードをプロファイルする良い方法はありますか?
はい。スレッドがあなたのアプリのパフォーマンスに影響しないならば、あなたはそれを間違っているし、まったく使っていないほうが良いでしょう。 UIのフリーズを防ぐ非同期性の必要性をモジュロにしますが、それは並行性ではありません。なぜマルチスレッドプログラムが泥を吸うのかを知るには、別の種類のツール[並行処理アナライザ]が必要です(https://msdn.microsoft.com/en-us/library/dd537632.aspx?f=255&MSPPError=-2147217396) 。 –