Я пишу элемент управления картой, который может отображать набор геометрических фигур. Для лучшей производительности я рисую все свои геометрии, используя 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
замена, улучшение привязки данных)?
Заранее спасибо,