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.编辑起来很是麻烦. 代码部分: /***** ...
随机推荐
- Oulipo(poj 3461)
题意:求b这个字符串在a中出现的次数 这里不用KMP,用hash #include<cstdio> #include<iostream> #include<cstring ...
- 1.1 STL 概述
综述 STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R M ...
- 三、jQuery--jQuery基础--jQuery基础课程--第8章 jQuery 实现Ajax应用
1.使用load()方法异步请求数据 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为:load(url,[data],[callback]) ...
- VS2010 自动跳过代码现象
今日,发现在Release的调试模式下,VS2010会“莫名其妙”的跳过一些代码不执行. 经实验,初步判断可能的原因:预处理器指令或编译器/连接器优化. 20150703更新: 部分代码: m_pTa ...
- 缓慢变化维 (Slowly changing dimension)
维度建模的数据仓库中,有一个概念叫Slowly Changing Dimensions,中文一般翻译成"缓慢变化维",经常被简写为SCD.缓慢变化维的提出是因为在现实世 ...
- Solr入门之(2)快速启动:第一个例子
Solr作为一个web应用来启动,因此需要JDK支持,需要WEB容器,本文环境如下: JDK6.0或以上(环境变量设置等不再赘述) Tomcat-6.0.35或以上(自行下载) apache-solr ...
- BAT批量处理 命令
第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...
- Oracle 11g新特性 -- 延迟段
11gR2之前的版本中,当创建一张表时,会自动分配段空间,这样做有几个弊端: 1. 初始创建表时就需要分配空间,自然会占用一些时间,如果初始化多张表,这种影响就被放大. 2. 如果很多表开始的一段时间 ...
- PHP商品秒杀计时实现(解决大流量方案)
PHP商品秒杀功能我们多半以整点或时间点为例子,这样对于php来说处理不复杂,但有一个问题就是如果流量大要如何来处理,下面我们一起来看看解决办法. 要求要有小时分钟秒的实时倒计时的显示,用户端修改日期 ...
- PathFinding.js 寻路类神器
最近有打算写个迷宫玩玩,无意中发下了这个库,很强大!又是开源在github的,并且有一个相当酷的demo.这个库不仅支持浏览器端的运行,而且可以运行在node.js上.怎么用到服务器上这里就不涉及了, ...