2011-12-15 102 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