WPF画线问题,几千条以后就有明显的延迟了。
我现在是这么画的,class A
{
private GeometryGroup _lines;
private Path _path;
public A()
{
_path.Data = _lines;
}
public Draw()
{
LineGeometry line = new LineGeometry(p1, p2);
_lines.Children.Add(line);
}
}一开始的速度很好,但是线多了以后,就有明显的延迟了。
有什么更快速的方法不?
解决方案 »
Actipro WPF Studio 組件是wpf最快的
程序应该没问题吧。
就是当Children的内容达到上万条以后,效率就会明显的下降。
我看了一下,Children属性返回的应该是个IList类型,不存在超过预分配的最大值,就重新分配数据的问题吧?
而且我把预定义的最大容量设到10万100万,还是没有很好的改善。这个问题有人能给点思路吗?
我已经把WPF下所有能画线的方式基本都试过了,效果还是不太理想。
1,直接在Canvas下Children.Add(Line),慢。
2,在Canvas下Children.Add(Path),然后Path.Data=GeometryGroup,然后GeometryGroup.Children.Add(LineGeometry), 慢。
3,不使用GeometryGroup,改用据说性能更好的StreamGeometry,慢。
4,使用DrawingVisual,然后用DrawingContext画图,
效果很奇怪,context.DrawGeometry(null, new Pen(_brushes[i], 1), line),这种方式比较快(说实话,还是不理想,勉强凑合)
但是我不用new Pen的方式,直接在类里面,定义好一个Pen _pen = new Pen(),然后context.DrawGeometry(null, _pen, line),这种方式的速度跟上面几种方法效果一样。
按道理不用每次都new Pen,应该快才对啊。我被这个问题快搞死了,是不是无解啊?就说明问题不是出在new的过程中,new的速度相当快的
可是在Winform下,画几千条一点延迟都没有。关键在于WPF是保留模式画图,而winform是立即模式画图。
在Winform下,每次我只画一条线,如果刷新的话,就把所有线都画一次,一般画图时不会刷新,所以画图速度很快。
但是在WPF下,每次画图,都是要Add一个对象进去,就这个差别导致数量多了以后,每次add一个对象都会比较慢。实在想不到在WPF下解决这个问题的办法。
WPF画线问题,几千条以后就有明显的延迟了。的更多相关文章
- WPF 画线动画效果实现
原文:WPF 画线动画效果实现 弄了将近三天才搞定的,真是艰辛的实现. 看了很多博客,都太高深了,而且想要实现的功能都太强大了,结果基础部分一直实现不了,郁闷啊~ 千辛万苦终于找到了一个Demo,打开 ...
- CGContextRef 画线简单用法
CGContextRef CGContextMoveToPoint(context,150,50);//圆弧的起始点 CGContextAddArcToPoint(context,100,80,130 ...
- Android中Path类的lineTo方法和quadTo方法画线的区别
转载:http://blog.csdn.net/stevenhu_223/article/details/9229337 当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的li ...
- 纯JS画点、画线、画圆的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
// Only override drawRect: if you perform custom drawing. // An empty implementation adversely affec ...
- Unity3D 画线插件 Vectrosity_Simple2DLine
Vectrosity是一个很方便的画线插件,用它我们可以画出2D,3D,贝塞尔,圆,椭圆等各种线条图案. :链接: http://pan.baidu.com/s/1pJjTFjt 密码: uesn 首 ...
- cocos2d-x3.6 连连看连通画线
我的博客:http://blog.csdn.net/dawn_moon 网上看到非常多人写的连连看,都没有画连线的实现.事实上要话连线挺简单的.cocos2d-x 提供了一个非常方便的绘图形的类.Dr ...
- ArcGIS API for JavaScript根据两个点坐标在地图上画线
ArcGIS API for JavaScript根据两个点坐标在地图上画线比如说a(xxxx,xxxxx),b(xxxx,xxxxx).利用这两个点画一条线 var polyline = new e ...
- 画线代码V1.0.0
画线代码: 最终效果图: 优点: 1.效果还行,计算量也不大(就一点2维直线一般式能有多少运算量). 缺点: 1.每条线怎么也是建模,可能会有点开销. 2.编辑起来很是麻烦. 代码部分: /***** ...
随机推荐
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(三) 之 实现单聊,群聊,发送图片,文件。
上篇讲解了如何搭建聊天服务器,以及客户端js怎么和layui的语法配合.服务器已经连接上了,那么聊天还会远吗? 进入正题,正如上一篇提到的我们用 Client.Group(groupId)的方法向客户 ...
- jq 轮播图
<style> #focus{width:500px;height:200px;overflow:hidden;/*用一个div把图片包含设置超出范围隐藏*/} </style> ...
- 与你相遇好幸运,Tippecanoe在Centos下の安装
全新的CentOS 7 x86_64 安装编译工具 yum install -y gcc automake autoconf libtool make yum insyall -y gcc gcc-c ...
- Babelfish(二分查找,字符串的处理略有难度,用sscanf输入)
Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 28581 Accepted: 12326 题目链接: ...
- CodeForces 371D Vessels(树状数组)
树状数组,一个想法是当往p注水时,认为是其容量变小了,更新时二分枚举,注意一些优化. #include<cstdio> #include<iostream> #include& ...
- 攻城狮在路上(叁)Linux(十一)--- 用户与用户组、文件权限、目录配置
一.用户与用户组: 3个概念:文件所有者(user).用户组(group).其他人(others). /etc/passwd <==存放所有的用户名 /etc/shadow <==存放 ...
- JS常用语句
JavaScript常用语句 1.document.write(""); 输出语句 2.JS中的注释为 // 3.传统的HTML文档顺序是: document-& ...
- Linux系统安装及初始化(ubuntu14.04)
Windows 7下硬盘安装Ubuntu 14.04图文教程 Ubuntu 官方已经发布了正式版的 Ubuntu 14.04 LTS,并宣称这是为云计算准备的版本.该版本在云平台和伸缩环境的可靠性.性 ...
- error C2039: “bind2nd”: 不是“std”的成员
VS2012 出现如下错误: error C2039: "bind2nd": 不是"std"的成员 头文件中加上 #include <functi ...
- Android 大牛的 blog 值得推荐 (转 整理)
1 收集了 国外著名开发者 25 人,包括 Github 地址.Blog 地址以及重点贡献介绍 链接 收集了 国内部分开发者 32人,包括 Github 地址.Blog 地址以及重点贡献介绍, 链接 ...