在WPF中 使用StreamGeometry提高性能。

现在正在使用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对象,首先绘制红色,在绘制绿色,就可以绘制所有的柱子。

时间: 2024-07-30 14:45:23

在WPF中 使用StreamGeometry提高性能。的相关文章

在计算列中创建索引提高性能

前言:在理解计算列上的索引之前,先了解计算列的基本知识.计算列由可以使用同一表中的其他列的表达式计算得来.表达式可以是非计算列的列名.常量.函数,也可以是用一个或多个运算符连接的上述元素的任意组合.表达式不能为子查询.默认情况下,计算列是一个虚拟的列,并且可以在调用时重新计算,直到在CREATE TABLE或者ALTER TABLE 命令中使用PERSISTED.如果列定义成PERSISTED,会存放计算值,并存放在原始列上更新后的汇总值,不能对计算列进行INSERT.UPDATE. 准备工作:

SQL中使用WITH AS提高性能,使用公用表表达式(CTE)简化嵌套SQL

一.WITH AS的含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分. 特别对于UNION ALL比较有用.因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可.如果WITH AS短语所定

Java编程中提高性能的几点建议

尽量减少对变量的重复计算 如 for(int i=0;i<list.size();i++) 应该改为 for(int i=0,len=list.size();i<len;i++) 并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 尽量使用移位来代替'a/b'的操作 "/"是一个代价很高的操作,使用移位的操作将会更快和更有效 如 int num = a / 4; int num = a /

php中一些提高性能的技巧

[概述] * 把类定义成static* echo比print快* 用全等号代替双等,减少类型转换* echo用逗号连接字符串效率高* require比require_once()快,并且尽量不要使用相对路径* 使用函数代替正则* 不要滥用@操作符* 字符串用单引号而不是双引号,因为双引号里面会判断是否有变量* 打开apache的mod_deflate模块可以提高网页浏览速度* 尽量少用全局变量和对象属性($this->num++)* 循环内部不要声明变量* 不需要的数组或数据及时unset掉*

【转】WPF中实现自定义虚拟容器(实现VirtualizingPanel)

在WPF应用程序开发过程中,大数据量的数据展现通常都要考虑性能问题.有下面一种常见的情况:原始数据源数据量很大,但是某一时刻数据容器中的可见元素个数是有限的,剩余大多数元素都处于不可见状态,如果一次性将所有的数据元素都渲染出来则会非常的消耗性能.因而可以考虑只渲染当前可视区域内的元素,当可视区域内的元素需要发生改变时,再渲染即将展现的元素,最后将不再需要展现的元素清除掉,这样可以大大提高性能.在WPF中System.Windows.Controls命名空间下的VirtualizingStackP

WPF中的字体改善

原文:WPF中的字体改善 WPF4对字体渲染做了很大的改善,增加了TextOptions属性,该属性可以设置TextFormattingMode,TextRenderingMode,TextHintingMode 1.TextFormattingMode 它提供了两种设置: · Ideal  —— WPF4之前的模式 · Display —— 新的模式,可以使字体显示更清晰 (一般将TextFormattingMode设置为Display,可以提高字体显示的清晰度) 2.TextRenderin

MSSQL - SqlDataAdapter连接数据库提高性能用法

SqlDataAdapter 与 SqlConnection 和 SqlCommand 一起使用,以便在连接到 SQL Server 数据库时提高性能. SqlDataAdapter 的这一实现自动打开和关闭 SqlConnection(如果它尚未打开). 在必须为两个或更多 SqlDataAdapter 对象调用 Fill 方法的应用程序中,它会非常有用. 如果SqlConnection 已打开,则必须显式调用 Close 或 Dispose 以将其关闭. private static Dat

Java编程提高性能时需注意的地方

最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源和总结一些在java编程中尽可能做到的一些地方 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资源的并发访问 第二,控制实例的产生,以达到节约资源的目的 第三,控制

使用C# yield关键字来提高性能和可读性

对于”yield”这个关键字我已经见过N次了,直到最近我才知道这个关键字所蕴含的力量.我将在下面展示出一些使用”yield”让你的代码有更高可读性和更好性能的例子. 为了让你对yield有一些快速概览,我首先要展示一个没有使用这个关键字的例子,下面的代码很简单,但在我最近的项目中却很常见 IList<string> FindBobs(IEnumerable<string> names) { var bobs = new List<string>(); foreach(v