数据绑定性能问题

时间:2011-12-15 14:39:29

标签: wpf data-binding graphics gis

我正在编写一个可以显示几何图形的地图控件。为了获得更好的性能,我使用DrawingVisual绘制了所有几何图形,然后将其写入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. 数据绑定也可能导致刷新地图图像的延迟
  3. 有没有更好的方法来改善地图效果(RenderTargetBitmap替换,数据绑定改进)?

    提前致谢,

1 个答案:

答案 0 :(得分:1)

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