您的位置:首页 > 其它

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下解决这个问题的办法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: