2
我在写一个地图控件,可以显示几何图形的长凳。为了更好的性能,我绘制使用DrawingVisual
S的我然后写入一个RenderTargetBitmap
所有我的几何结构示于下面的代码:数据绑定性能问题
public class Map{
public ImageSource MapDrawingImage{get;set;}
private void RenderMap(){
MapDrawingImage= new RenderTargetBitmap(w, h, 96, 96, PixelFormats.Pbgra32);
foreach (Layer layer in map.Layers) {
System.Windows.Media.DrawingVisual layerDrawing = Render(layer, map);
MapDrawingImage.Render(layerDrawing);
}
}
}
为了显示在地图上,在主窗口具有Image
控制其Source
是设置为Map.MapDrawingImage
图片源。要自动更新图像,我使用以下数据绑定:
RenderOptions.SetBitmapScalingMode(mapImage, BitmapScalingMode.LowQuality);
// Map image binding
Binding mapBinding = new Binding();
mapBinding.Source = map;
mapBinding.Path = new PropertyPath("MapDrawingImage");
mapImage.SetBinding(System.Windows.Controls.Image.SourceProperty, mapBinding);
当地图为静态时,此功能非常有效。但是,在地图以每秒5到10次的速度更新的动态模式下,数据绑定似乎落后了一段时间,应用程序变慢。我搜索了很长时间,发现:
RenderTargetBitmap
不使用硬件加速,因此在渲染地图时会导致一些延迟。- 数据绑定也可能导致一些延误刷新地图图像
有没有更好的方法来改善地图性能(RenderTargetBitmap
替换,数据绑定改进)?
在此先感谢,
静态图像将是一个需要被锁定的共享资源,它仍然会降低性能 – GETah 2011-12-20 21:16:54