現在正在使用WPF開發一個股票K線圖圖表,性能考慮是最大的一方面。 每根柱子寬5像素,柱子和柱子之間的間隔3像素。 一個1920*1080解析度的屏幕,勢必要繪製超過200個柱子。如果選擇的繪製方案不先進,對圖表的繪製是有很大的性能影響的。 任何圖形都由直線和曲線構成的。在WPF中,最底層的圖形的繪 ...
現在正在使用WPF開發一個股票K線圖圖表,性能考慮是最大的一方面。 每根柱子寬5像素,柱子和柱子之間的間隔3像素。
一個1920*1080解析度的屏幕,勢必要繪製超過200個柱子。如果選擇的繪製方案不先進,對圖表的繪製是有很大的性能影響的。
任何圖形都由直線和曲線構成的。在WPF中,最底層的圖形的繪製級別是Geometry。
在WPF中,使用DrawingContext的方法繪製一個直線,就內部創建了一個LineGeometry對象,繪製一個矩形,就內部創建了一個RectagleGeometry對象。
所以使用傳統的DrawLine,DrawRectangle來繪製這些柱子是不科學的。因為 每一根柱子,包含一個矩形和一根直線。
假設繪製200個柱子,每次要實例化200個LineGeometry對象以及200個RectangleGeometry對象。
在拖動的時候,不停的實例化和回收Geometry對象,畫面的延遲是非常明顯的。
那麼有沒有一種繪製方案 可以減少對象的產生呢。StreamGeometry!StreamGeometry的效率非常之高,因為他是直接 保存位元組流繪製數據的。
StreamGeometry的工作方式就類似於一臺激光印表機,它可以隨意切換下一次繪製的開始坐標。
仔細分析一下K線圖,會發現,K線圖是由兩種顏色的柱子組成的。由於DrawingContext一次只能提交一種顏色的填充以及繪製邊緣的命令。所以至少要繪製兩次。
使用兩個StreamGeometry對象,首先繪製紅色,在繪製綠色,就可以繪製所有的柱子。