アプリの「RelDebug」ビルドでVisualStudio2008プロファイラーを実行します。最適化はオンになっていますが、インライン化は中程度であり、スタックフレームが存在し、シンボルが出力されます。言い換えると、RelDebugは、デバッグ可能なある程度最適化されたビルドです(ただし、変数の検査に関する通常のリリースの警告が適用されます)。
サンプリングとインストルメント化プロファイラーの両方を別々の実行で実行します。
結果?サンプリングプロファイラーは、妥当に見える結果を生成します。ただし、インストルメント化されたプロファイラーの結果を見ると、リストの一番上にあるべきではない関数が表示されます。
たとえば、クラスメンバーに高さを割り当てる1行のみで構成される「SetFont」のような関数。または、単に長方形を割り当てる「SetClipRect」。
もちろん、私は「排他的」統計(つまり、子供を差し引いたもの)を見ています。
これは他の誰かに起こりますか?私のアプリケーションが特定のサイズに成長すると、それは常に起こるようです。その時点では、インストルメントされたプロファイラーは役に立たなくなります。
私は問題を理解しました。VisualStudio2008とVisualStudio2010プロファイラーはどちらも平凡です(丁寧に言えば)。vTuneアンプ(プロファイラー)が付属しているインテル®C++スタジオを購入しました。まったく同じコードでIntelプロファイラーを使用すると、実際に意味のあるプロファイラーの結果を得ることができました。