Viewport3D の FPS を表示しようとしています。
調べてみると、CompositionTarget.Rendering に出くわしましたが、これは「WPF パフォーマンス スイート」ツールで表示される FPS とは異なる結果になるようです。
CompositionTarget.Rendering を使用すると、(マウス/キーボード イベントに応答して) ビューポート カメラと対話するまで、安定した 60 fps が表示されます。その後、fps は 150 から 200 fps まで上昇しますが、「WPF パフォーマンス スイート」はツールは引き続き安定した 60 fps を表示します。
これは、「WPF パフォーマンス スイート」ツールが正確な FPS を表示するためだと思います。つまり、WPF チームが実際にバックバッファーで Present を呼び出すたびに、CompositionTarget.Rendering は内部で更新される fps ですが、実際の fps を表すものではありません。
「WPF パフォーマンス スイート」ツールに沿ったものをもっと表示したいのですが、どうすればこれを実現できますか?
次のようにCompositionTarget.Renderingを使用しています-
Viewport3D()
{
CompositionTarget.Rendering += (s, a) =>
{
++m_frames;
};
DispatcherTimer fpsTimer = new DispatcherTimer();
fpsTimer.Interval = TimeSpan.FromSeconds(1);
fpsTimer.Tick += (s, a) =>
{
m_fpsText.Text = string.Format("FPS:{0}", m_frames);
m_frames = 0;
};
fpsTimer.Start();
}