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);

}
}一开始的速度很好,但是线多了以后,就有明显的延迟了。
有什么更快速的方法不?

解决方案 ?

  1. Actipro WPF Studio 組件是wpf最快的

  2. 程序应该没问题吧。
    就是当Children的内容达到上万条以后,效率就会明显的下降。

    我看了一下,Children属性返回的应该是个IList类型,不存在超过预分配的最大值,就重新分配数据的问题吧?

    而且我把预定义的最大容量设到10万100万,还是没有很好的改善。

  3. 这个问题有人能给点思路吗?
    我已经把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,应该快才对啊。我被这个问题快搞死了,是不是无解啊?

  4. 就说明问题不是出在new的过程中,new的速度相当快的

  5. 可是在Winform下,画几千条一点延迟都没有。关键在于WPF是保留模式画图,而winform是立即模式画图。

    在Winform下,每次我只画一条线,如果刷新的话,就把所有线都画一次,一般画图时不会刷新,所以画图速度很快。

    但是在WPF下,每次画图,都是要Add一个对象进去,就这个差别导致数量多了以后,每次add一个对象都会比较慢。实在想不到在WPF下解决这个问题的办法。

WPF画线问题,几千条以后就有明显的延迟了。,布布扣,bubuko.com

时间: 2024-10-23 08:18:28

WPF画线问题,几千条以后就有明显的延迟了。的相关文章

IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

转自:http://blog.csdn.net/zhibudefeng/article/details/8463268 [cpp] view plain copy // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { CGC

unity3d NavMeshAgent 寻路画线/画路径

今天在群里看见有个小伙在问Game视图寻路时怎么画线 正好前几天写了个寻路,而且自己也不知道具体怎么在寻路时画线,所以决定帮帮他,自己也好学习一下 在百度查了一下资料,直接搜寻路画路径.寻路画线...... 我可不是伸手党,我只是想看看别人是怎么实现的 结果什么都没有搜到!!那就直接搜unity3d 画线吧.....  果然很多资料!! Debug.DrawLine:使用这个函数只能在 screen 中看见画的线,在 game 中看不见 那我们要怎么在game中画线呢 百度给我答案:LineRe

Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect{    CGContextRef context = UIGraphicsGetCurrentContext();         /*NO.1画一条线     CGContex

[游戏学习25] MFC 橡皮筋画线效果

>_<:这是给出窗口内外不同情况的处理展示的例子. >_<:MouseCap.h 1 #include<afxwin.h> 2 class CMyApp :public CWinApp 3 { 4 public: 5 virtual BOOL InitInstance(); 6 }; 7 class CMainWindow:public CFrameWnd 8 { 9 protected: 10 BOOL m_bTracking; //标志:鼠标按下为真,否则为假 11

WPF画箭头

前段时间,因工作需要利用WPF画箭头,在参考Using WPF to Visualize a Graph with Circular Dependencies后.自己写了一个WPF画箭头的库. 先上效果图, XAML代码如下: <Window x:Class="WPFArrows.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="

图形学--(中点画线法+Bresenham画线算法)

编程环境:codeblocks+EGE库 用到的函数:putpixel(int x1,int y1,int color)  用某种颜色打亮一个坐标点. 这俩种算法都是用来在计算机上画一条直线的,那么我们为什么不直接用直线方程分别带点再打亮呢,这是因为,计算机中每个坐标点都是整数,而直线是由一个个像素点组合而成的,那么,直接将坐标点再进行四舍五入整数化就好了啊,的确,这是一种方法,但计算机中进行浮点数的四舍五入会使运算效率变差,因此真正画直线时是用到上边这俩种方法的. 1.中点画线法 只考虑当直线

openCV 和GDI画线效率对照

一. 因为项目须要,原来用GDI做的画线的功能.新的项目中考虑到垮平台的问题.打算用openCV来实现.故此做个效率对照. 二. 2点做一条线,来測试效率. 用了相同的画板大小---256*256的大小,函数通过參数输入.用GetTickCount来实现计时功能. 三. GDI的主要循代码例如以下: void show_line(int line_num,int point_num) { ULONAG start_time = get_tick_count(); VMGdiPolygon* te

Android中Path类的lineTo方法和quadTo方法画线的区别

当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的lineTo和quadTo方法实现的绘制线路形式也是不一样的,下面就以代码的实现来直观的探究这两个方法的功能实现区别: 1. Path--->quadTo(float x1, float y1, float x2, float y2): 该方法的实现是当我们不仅仅是画一条线甚至是画弧线时会形成平滑的曲线,该曲线又称为"贝塞尔曲线"(Bezier curve),其中,x1,y1为控制点的坐标值,x2,y2为终

计算机图形学(二)输出图元_3_画线算法_1_直线方程

画线算法 场景中的直线段由其两端点的坐标位置来定义.要在光栅监视器上显示一线段,图形系统必须先将两端点投影到整数屏幕坐标,并确定离两端点间的直线路径最近的像素位置.接下来将颜色值装人帧缓存相应的像素坐标处.视频控制器从帧缓存读出写入的颜色值并绘制屏幕像素.这一过程将一线段数字化为一组离散的整数位置.一般而言,这些位置是实际线路径的近似.例如,计算出的线位置(10.48, 20.51)转换为像素位置(10, 21).坐标值舍入到整数,引起除水平和垂直以外所有线段的阶梯效应("锯齿形"),