2011-09-26 164 views
8

我正在開發一個使用WPF的應用程序的地圖。我有〜10,000 PathGeometry,形狀添加到畫布。我已經爲縮放和平移控件添加了ScaleTransform和TranslateTransform。提高WPF畫布的性能

我面臨的問題是,當我縮放或平移時,會有輕微的滯後。有沒有辦法組織數據,以便我只處理可見的形狀?

任何提示使其更有效率將有所幫助和讚賞。

回答

6

你把什麼樣的東西放在畫布上?如果使用pathGeometry,是否將它們放在Path類中?如果是這樣,Path在其超類層次結構中具有FrameworkElement,這是造成巨大性能損失的原因。

Take a look at my question here.雖然是關於Shape類,但是性能下降的原因是一樣的,FrameworkElement。

如果您這樣做,解決方案是使用PathGeometry代替,然後使用DrawingContext.DrawGeometry()方法將其封裝在DrawingVisual的DrawingContext中。

這裏有一些應該幫助的鏈接。 Path Geometry

DrawingContext.DrawGeometry()

Optimizing Performance: 2D Graphics and Imaging

而自己繪製的形狀,利用線的組合,並且通過從Geometry類(ArcGeometry,的PathGeometry等)派生類提供其他事情。

這應該有所幫助。

2

如果你想在WPF即時繪圖性能的極致,然後檢查WriteableBitmapEx。這是一個優秀的開源庫,我最近爲它做出了貢獻。它在WriteableBitmap上提供類似於GDI的繪圖功能,並與Windows Phone,WPF和Silverlight兼容。該API很簡單,你得到塊傳輸,多邊形的線條和簡潔的造型等等......你不會得到的DataTemplates和漸變畫筆但是。