如今正在使用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对象,首先绘制红色,在绘制绿色,就能够绘制全部的柱子。