Wpf:为什么WriteableBitmap变得越来越慢?

8

这里有一个关于WriteableBitmap的简单MSDN示例

它展示了如何通过在WPF-图像控件上更新一个像素来使用光标绘制自由手线条,当鼠标被按下并在移动时。

 writeableBitmap.Lock();  
 (...set the writeableBitmap.BackBuffers pixel value...)
 writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
 writeableBitmap.Unlock();

现在我正在尝试理解鼠标指针移动得非常快时的以下行为:

如果图像/位图的大小相对较小,例如800:600像素,则最后绘制的像素始终与鼠标指针的位置“同步”,即没有延迟,对鼠标移动的反应非常快。

但是,如果位图变得更大,例如1300:1050像素,则可以注意到有延迟,最后绘制的像素总是稍微滞后于移动的鼠标指针。

因此,在这两种情况下,只有一个像素使用“AddDirtyRect”进行更新,反应速度应该与位图大小无关!但似乎当Writeablebitmap变大时,它会变慢。

或者整个位图是否在每次writeableBitmap.Unlock();调用时以某种方式传输到图形设备中,而不仅仅是在AddDirtyRect方法中指定的矩形区域?

fritz

2个回答

4

但我看到那个线程中有人仍然遇到了性能问题,所以是否有人真正确认它已经解决了? - Brady Moritz
截至目前,WriteableBitmap仍存在性能问题。我使用像fritz一样的AddDirtyRect方法仅更改需要更改的像素,但是图像越大,速度就越慢。顺便说一下,我正在使用.NET 4.6 :/. - user1618054

4
在 .Net 4 中,可写位图仍然会使整个区域无效,无论您在哪里添加脏矩形。您可以使用 Perforator 来确认此问题,Perforator 是随 Windows SDK v7.1 一起提供的 Windows 性能工具包的一部分。
这是一个重大的性能 bug。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接