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