我正在開發一個使用WPF的應用程序的地圖。我有〜10,000 PathGeometry,形狀添加到畫布。我已經爲縮放和平移控件添加了ScaleTransform和TranslateTransform。提高WPF畫布的性能
我面臨的問題是,當我縮放或平移時,會有輕微的滯後。有沒有辦法組織數據,以便我只處理可見的形狀?
任何提示使其更有效率將有所幫助和讚賞。
我正在開發一個使用WPF的應用程序的地圖。我有〜10,000 PathGeometry,形狀添加到畫布。我已經爲縮放和平移控件添加了ScaleTransform和TranslateTransform。提高WPF畫布的性能
我面臨的問題是,當我縮放或平移時,會有輕微的滯後。有沒有辦法組織數據,以便我只處理可見的形狀?
任何提示使其更有效率將有所幫助和讚賞。
我建議你看看這個有趣的文章,虛擬畫布的概念:ZoomableApplication2: A Million Items。它還有一個在線(xbap)演示。
你把什麼樣的東西放在畫布上?如果使用pathGeometry,是否將它們放在Path類中?如果是這樣,Path在其超類層次結構中具有FrameworkElement,這是造成巨大性能損失的原因。
Take a look at my question here.雖然是關於Shape類,但是性能下降的原因是一樣的,FrameworkElement。
如果您這樣做,解決方案是使用PathGeometry代替,然後使用DrawingContext.DrawGeometry()方法將其封裝在DrawingVisual的DrawingContext中。
這裏有一些應該幫助的鏈接。 Path Geometry
Optimizing Performance: 2D Graphics and Imaging
而自己繪製的形狀,利用線的組合,並且通過從Geometry類(ArcGeometry,的PathGeometry等)派生類提供其他事情。
這應該有所幫助。
如果你想在WPF即時繪圖性能的極致,然後檢查WriteableBitmapEx。這是一個優秀的開源庫,我最近爲它做出了貢獻。它在WriteableBitmap上提供類似於GDI的繪圖功能,並與Windows Phone,WPF和Silverlight兼容。該API很簡單,你得到塊傳輸,多邊形的線條和簡潔的造型等等......你不會得到的DataTemplates和漸變畫筆但是。