我有一个在WPF中测量FPS的方法(我真的不知道这是否是正确的测量方法)。
CompositionTarget.Rendering += CompositionTarger_Rendering;
void CompositionTarget_Rendering(object sender, EventArgs e)
{
var args = (RenderingEventArgs)e;
if(args.RenderingTime == m_Last)
{
return;
}
m_Last = args.RenderingTime;
DoingFpsCalculations(); // This method adds to a counter and reports each elapsed second what the counter is => FPS
}
这些计算显示,我大约有40-60 FPS
然而,有时我可以看到,这是真的不是这样。FPS计数器的报告让说50 FPS,但用户界面是绝对更新在较低的FPS。
例如,我有一个DispatcherTimer在15 Hz下运行,该计时器调用一个渲染方法,并更新绑定到RenderTransform的UI元素的转换。该计时器以15 Hz被调用,并及时完成其计算。FPS显示为40-60 fps,但UI元素绝对仅在4-6 FPS下更新。
我能依靠什么呢?
我知道UI线程和渲染线程之间有区别,所以真实的的FPS应该在渲染线程上测量?但是我怎么才能得到呢?
提前感谢!
1条答案
按热度按时间zzlelutf1#
多年后,但我想我会分享给后代。WPF将下降的数额
CompositionTarget_Rendering
是调用时,其他事件不进行。一解决这个问题的方法是在屏幕上运行一个恒定的动画。(它必须在可见表面上的某处,如果您将它从屏幕上移开,WPF会很聪明地忽略它)。在我测试过的每个工作站上都是60fps(在你的例子中,你已经考虑到了另一个问题,那就是它可以运行超过60fps)。