1

我的主要目标是在我放大画布时更新绘图视觉厚度。如果画布中有太多绘图视觉对象(如 100.000 行),则更新每个绘图视觉对象需要很长时间。所以我决定在我的班级里有一个 Pen 属性,然后用那支笔创建 dravingvisuals。笔粗细属性与画布的缩放比例绑定。这种方式缩放工作得很好,它足够快,并且驱动视觉的厚度正在正确更新。关于这一点的问题是创建 100000 行需要大约 4 分钟的时间。

public Pen pen { get; set; }

private void test()
{
    Point lastPoint=new Point(0,0);
    double lastAngle=0;

    for (int i = 1; i <100000; i++)
    {
       Line temp = new Line(lastPoint, lastAngle, 20);          

       _lineList.Add(temp);
       lastPoint = temp.Point2;
       lastAngle = lastAngle > 360 ? 0 : lastAngle + 30;            
    }

    foreach (Line l in _lineList)
    {               
      VisualAdd(l.Geometri(), l.CNID, pen);
    }
}

public void VisualAdd(Geometry g, int id, Pen p)
{
    DrawingVisual c = DrawingVisualCreate(g, id, p);
  _children.Add(DrawingVisualOlustur(g,id,p));
}



private DrawingVisual DrawingVisualCreate(Geometry g, int id,Pen p)
{                             
    DrawingVisual drawingVisual = new DrawingVisual();
    DrawingContext drawingContext = drawingVisual.RenderOpen();
    drawingContext.DrawGeometry(null, p, g);
    drawingContext.Close();
    drawingVisual.Id = id;
    return drawingVisual;
}

如果我创建如下图所示的视觉效果来创建 100000 条线,则只需 2 秒。但正如我解释的那样,在缩放时更新厚度将是一个大问题。

public void VisualAdd(Geometry g, int id)
{
    DrawingVisual c = DrawingVisualCreate(g, id);
  _children.Add(DrawingVisualOlustur(g,id,p));
}

private DrawingVisual DrawingVisualCreate(Geometry g, int id)
{                             
    DrawingVisual drawingVisual = new DrawingVisual();
    DrawingContext drawingContext = drawingVisual.RenderOpen();
    drawingContext.DrawGeometry(null, new Pen(Brushes.Black,1), g);
    drawingContext.Close();
    drawingVisual.Id = id;
    return drawingVisual;
}

我不明白为什么在使用作为已创建属性的笔进行创建时会如此缓慢。

4

0 回答 0