【发布时间】:2010-10-22 19:23:51
【问题描述】:
我创建了一个 WPF 控件(继承自 FrameworkElement),它显示了一个可以平移的平铺图形。每个图块为 256x256 像素,24bpp。我已经覆盖了 OnRender。在那里,我加载任何新的图块(作为 BitmapFrame),然后使用 drawingContext.DrawImage 绘制所有可见的图块。
现在,只要每个渲染周期有多个新图块,帧速率就会从 60fps 下降到零大约一秒钟。这不是由加载图像(以毫秒为单位)引起的,也不是由 DrawImage(根本不需要时间,因为它只是填充了一些中间渲染数据结构)引起的。
我的猜测是,每当渲染线程获得大量 (~20) 新的 BitmapSource 实例(即,它尚未缓存的实例)时,它就会阻塞。要么花费大量时间将它们转换为某些内部 DirectX 兼容格式,要么可能是缓存问题。它不能用完视频 RAM; Perforator 显示峰值低于 60MB,我有 256MB。此外,Perforator 说所有渲染目标都是硬件加速的,所以也不是这样。
任何见解都将不胜感激!
提前致谢
丹尼尔
@RandomEngy:
BitmapScalingMode.LowQuality 稍微减少了这个问题,但并没有摆脱它。我已经在以预期的分辨率加载图块。而且它不能是最新的图形驱动程序(Nvidia)。
得知缩放需要这么多时间,我有点惊讶。按照我的理解,位图(无论其大小)只是作为 Direct3D 纹理加载,然后进行硬件缩放。事实上,一旦位图第一次被渲染,我就可以改变它的旋转和缩放,而无需进一步冻结。
【问题讨论】:
标签: wpf performance bitmap rendering