WPF.Net中用户界面性能的正确测量方法

nle07wnf  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(155)

我有一个在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应该在渲染线程上测量?但是我怎么才能得到呢?
提前感谢!

zzlelutf

zzlelutf1#

多年后,但我想我会分享给后代。WPF将下降的数额CompositionTarget_Rendering是调用时,其他事件不进行。一解决这个问题的方法是在屏幕上运行一个恒定的动画。(它必须在可见表面上的某处,如果您将它从屏幕上移开,WPF会很聪明地忽略它)。在我测试过的每个工作站上都是60fps(在你的例子中,你已经考虑到了另一个问题,那就是它可以运行超过60fps)。

相关问题