Wpf:为什么WriteableBitmap变慢?
有关于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();
的图形设备上writeableBitmap.Unlock();
调用,而不仅仅是AddDirtyRect
方法中指定的矩形区域?
弗里茨
.Net 3.5中的WPF的WriteableBitmap中存在一个错误,它会导致对AddDirtyRect的任何调用使整个图像无效,而不仅仅是矩形区域。
它应该已被固定在.Net 4.0中
请参阅http://social.msdn.microsoft.com/Forums/en-US/wpfprerelease/thread/1b84e451-9698-431f-9c51-078825a729b5
在.Net 4中,无论您在哪里添加脏矩形,可写位图都会使整个区域无效。 您可以使用Perforator进行确认,Perforator是Windows SDK v7.1附带的Windows性能工具包的一部分。
这是一个主要的性能错误。
链接地址: http://www.djcxy.com/p/26871.html