簡體   English   中英

使用 WPF 視覺層的高性能圖形

[英]High performance graphics using the WPF Visual layer

我正在創建一個 WPF 映射程序,它可能會在任何時候加載和繪制數百個文件到屏幕上,用戶可能想要縮放和平移此顯示。 其中一些文件類型可能包含數千個點,這些點很可能作為某種路徑連接。 其他支持的格式將包括 TIFF 文件。

有一個繪制所有數據的單一 DrawingVisual 對性能更好,還是應該為每個加載的文件創建一個新的 DrawingVisual?

如果有人可以就此提供任何建議,將不勝感激。

您會在 Stack Overflow 上找到許多相關問題,但並非所有問題都提到將大量數據繪制到屏幕的最高性能方法之一是使用WriteableBitmap API。 我建議查看Codeplex上的WriteableBitmapEx開源項目。 披露,我曾經為此做出過貢獻,但這不是我的圖書館

嘗試過 DrawingVisual、StreamGeometry、OnRender、Canvas,一旦您必須在屏幕上繪制 1,000 多個或更多“對象”,所有這些都會失敗。 有一些技術可以處理畫布的虛擬化(虛擬畫布有100 萬個項目演示),但即使這樣也僅限於在減速之前一次可見的 ~1000。 WriteableBitmap 允許您直接訪問位圖並在其上繪制(oldskool 風格),這意味着您可以快速繪制數以萬計的對象。 您可以自由地實現自己的優化(多線程、細節級別),但請注意,該 API 並沒有太多裝飾。 你實際上是在自己做這項工作。

不過有一個警告。 WPF 使用 CPU 進行曲面細分/GPU 進行渲染,而 WriteableBitmap 將使用 CPU 進行所有操作。 因此,填充率(每幀渲染的像素數)成為取決於您的 CPU 能力的瓶頸。

如果你真的需要高性能渲染,我建議你看看SharpDX (Managed DirectX)和與 WPF 的互操作。 這將為您提供最高性能,因為它將直接使用 GPU。

在我的體驗中,使用許多小的 DrawingVisual 並且每個視覺呈現的細節很少,與每個視覺呈現的更多細節的較少 DrawingVisual 相比,性能更好。 我還發現,在需要重繪時,刪除所有視覺效果並呈現新視覺效果比重用現有視覺效果要快。 將每張地圖分解成多個視覺效果可能有助於提高性能。

與任何與性能相關的事情一樣,使用您自己的場景進行計時測試是確定的最佳方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM