2012-03-02 88 views
0

我正在創建一個WPF應用程序,該應用程序將顯示城市規模水管理系統的2D矢量圖形。我已經從數百頁閥門,泵,處理設施等的示意圖和連接它們的管道獲取了數據。將其與個別住宅和商業地產的地圖信息結合起來,該數據集包含大約100,000個節點實例以及相互連接的管道信息。我有一個概念驗證應用程序,它爲每個管段或節點(節點非常簡單;矩形,圓等)創建一個DrawingVisual,創建一個DrawingContext,呈現管道的線段或節點的圖形表示。 DrawingVisuals被添加到畫布。每個視覺效果都是可以測試的(我需要能夠點擊其中的任何一個來獲得更詳細的信息)。問題是,隨着視覺效果數量超過幾千,性能(平移,縮放)會降低(儘管如此,真的很酷!)。我試圖擺弄反走樣&位圖緩存,但它沒有太大的幫助。使用繪圖視圖在WPF中顯示2D原理圖

這是WPF中可能的事情嗎?有更好的方法嗎?我來自MFC背景,僅在6-8個月前纔開始使用WPF,儘管我擁有相當多的C#經驗。從閱讀這裏的帖子,我看到Direct3D經常被提及,但它並沒有真正符合平面,2D,線條圖的法案,還是我錯了?我見過的XNF教​​程只處理精靈,這似乎不太合適?我已閱讀與業務圖相關的帖子;在這些情況下,下采樣數據似乎是合適的,但我不確定我能做到這一點,因爲每個節點的互連管道都是相關的。用戶需要合理快速縮放&平移到原理圖中的任何點。我認爲OpenGL可能是一件好事,但我真的很喜歡WPF的所有功能(命中測試,優秀幾何類等)

有什麼建議嗎?

謝謝!

回答

0

如果你還沒有,你應該看看WPF性能工具:http://msdn.microsoft.com/en-us/library/aa969767.aspx。您應該能夠了解真正的瓶頸在哪裏,每次重做的內容以及更多內容。

我不得不面對一些3D模型縮放WPF的問題。儘管我對2D等效條款不太確定,但建議可能仍然適用。

WPF有足夠的優勢來努力爲您的用例優化它,而不是考慮一些替代架構。我覺得對於我來說,理解和解決性能問題比處理其他一些框架要少得多。

最後,我最大的伎倆是整合模型和視覺效果。我沒有大量的小模型,每個模型都可以通過自己的顏色等進行檢測,我把它們聚合成代表許多組件的大型模型。然後,我處理大模型的命中測試,以進一步優化選擇並決定哪個小組件實際上應該被「擊中」。從那裏,而不是改變整個聚合模型的顏色,我覆蓋了一個較小的模型來表示選擇。我想你會明白...

所以你需要弄清楚你繪圖中的哪個抽象部分不能很好地伸縮 - 可能是DrawingVisuals的數量,或者你使用的其他UIElement的數量,然後嘗試合併這些。