2011-12-15 131 views
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次的速度更新的动态模式下,数据绑定似乎落后了一段时间,应用程序变慢。我搜索了很长时间,发现:

  1. RenderTargetBitmap不使用硬件加速,因此在渲染地图时会导致一些延迟。
  2. 数据绑定也可能导致一些延误刷新地图图像

有没有更好的方法来改善地图性能(RenderTargetBitmap替换,数据绑定改进)?

在此先感谢,

回答

1

数据绑定在单独的线程中更新。所以这会一直拖延下去。它也适用于一个队列,所以当数据绑定无法跟上时队列会越来越大。解决方法是使用静态图像并更改图像本身,而不是将图像替换为其他图像。

+0

静态图像将是一个需要被锁定的共享资源,它仍然会降低性能 – GETah 2011-12-20 21:16:54