我创建了一个WPF控件(自FrameworkElement继承),显示一个平铺的图形可以平移。每个瓷砖在24bpp处都是256x256像素。我重写了OnRender。在那里,我加载了任何新的图块(如BitmapFrame),然后使用drawingContext.DrawImage绘制所有可见的图块。WPF渲染性能的BitmapSource
现在,每当有超过每循环渲染了一把新的瓷砖,帧率从60fps到零下降约一秒钟。这不是由加载图像(以毫秒为单位)或DrawImage(根本不需要任何时间,因为它只是填充一些中间渲染数据结构)引起的。
我的猜测是,渲染线程本身扼流圈一旦进入新的BitmapSource实例的大量(约20),(也就是那些它尚未高速缓存)。要么花费很多时间将它们转换为内部DirectX兼容格式,要么它可能是缓存问题。它不能用完视频RAM;穿孔器在60MB以下显示峰值,我有256MB。此外,Perforator说,所有渲染目标都是硬件加速的,所以也不能这样做。
任何见解将不胜感激!
在此先感谢
丹尼尔
@RandomEngy:
BitmapScalingMode.LowQuality减少问题了一点,但并没有摆脱它。我已经按照预期的分辨率加载了瓷砖。它不能是图形驱动程序,它是最新的(Nvidia)。
我有点惊讶地得知,缩放花费那么多时间。按照我的理解,位图(不管其大小)只是作为Direct3D纹理加载,然后进行硬件缩放。事实上,一旦位图第一次被渲染,我可以改变它的旋转和缩放,而不会有任何冻结。