WPF画线问题,几千条以后就有明显的延迟了。
2014-06-06 11:09
197 查看
我现在是这么画的,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下解决这个问题的办法。
相关文章推荐
- 如何解决Win8.1下玩游戏鼠标指针冻结或者明显延迟的问题
- WPF下、使用Double作为点坐标带来的问题或line直线颜色不明显的问题的解决方法
- 邮件服务器问题--邮件积压、传递延迟解决方法 推荐
- 以后不要考虑那些生活中的细节问题,什么事做到问心无愧即可!
- 以后设计的问题
- WPF - 基础问题
- 中国民生问题在四方面得到明显改善
- WPF常见问题的问与答[1]
- 台电让我心寒,以后你们还感买吗?对他们提出问题,居然被删注册信息!!台电的信誉呢?飞了~~
- [网络问题,截图以后再传]本实验是设计性实验。目的在于使用关系数据库标准语言SQL,掌握视图和索引的操作。
- 让人抓狂的问题:运行WPF Browser Application(XBAP)导致PresentationHost(IE)崩溃
- Intel集成显卡的桌面右键菜单延迟问题
- Magic Linux试用不错,不过有些明显的小问题,希望越来越好
- 解决实体载入的性能问题 - Lazy Load,延迟载入
- 都是小问题..以后集合到一起发.
- [转] 解决实体载入的性能问题 - Lazy Load,延迟载入
- 因为开发中遇到很多C++的问题,以后会经常来csdn寻求帮助了!
- 在VSTF中权限之间的关联性(不太明显的关联性)--设置权限时必须考虑的问题
- 针对wmp11以后版本的流媒体播放解决的问题~
- 关于WPF打印的问题