我写这个类作为测试,看看WPF绘制的速度有多快。它被设置为窗口的子元素。
internal class TestElement : UIElement
{
private readonly Stopwatch st = new Stopwatch();
private int frames = 0;
public TestElement()
{
this.st.Start();
CompositionTarget.Rendering += (sender, args) =>
{
this.frames++;
if (this.st.ElapsedMilliseconds >= 1000)
{
Debug.WriteLine(this.frames);
this.frames = 0;
this.st.Restart();
}
this.InvalidateVisual();
};
}
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawEllipse(Brushes.Red, null, Mouse.GetPosition(this), 5, 5);
}
}
InvalidateVisual
需要0 ms。此外,帧率大多数时间是60。但是,我看到将椭圆绘制到屏幕上有相当大的延迟。它似乎跟在鼠标后面太远了。这是一个视频:
显然,它看起来不像60fps。会是什么原因?