現在正在使用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對象,首先繪制紅色,在繪制綠色,就可以繪制所有的柱子。