我写了一个Windows Forms C#应用程序来绘制像线这样的矢量图元。椭圆等我有一个方法来改变选定图形的边框宽度。这是方法:为什么这种方法工作如此缓慢?
public void SetBorderWidth(int border)
{
if (border < 0)
return;
if ((SelectedItem != null) && (SelectedItem.isGroup == false))
{
SelectedItem.BorderWidth = border;
}
if ((SelectedItem != null) && (SelectedItem.isGroup == true))
{
ChangeCascadeBorderWidth(SelectedItem, border);
}
foreach (Shape figure in ObjectsDrawn)
{
if (figure.Selected)
{
ObjectsDrawn[ObjectsDrawn.IndexOf(figure)].BorderWidth = border;
}
if (figure.isGroup)
{
ChangeCascadeBorderWidth(figure, border);
}
}
}
谁调用方法:
private void ChangeCascadeBorderWidth(Shape group, int width)
{
foreach (Shape item in ((Grouping)group).GroupedElements)
{
if (item.isGroup == true)
{
ChangeCascadeBorderWidth(item, width);
}
else
{
item.BorderWidth = width;
}
}
}
如果这个数字是几个数字组。但是这个工作太慢了。无论我选择了一组还是一组数字,有时候我都要等10-15秒。用于改变边框宽度。为什么这么慢?
多次暂停调试器。它在哪里停止最多? – usr
当我有一个数字时,它停在这里一次:SelectedItem.BorderWidth = border;有一次在这里:ObjectsDrawn [ObjectsDrawn.IndexOf(figure)]。BorderWidth = border ;. 当我有一组两个数字时,它在这里停止一次:ChangeCascadeBorderWidth(SelectedItem,border);一次在这里:ChangeCascadeBorderWidth(figure,border);;这里有一次:ObjectsDrawn [ObjectsDrawn.IndexOf(figure)]。 BorderWidth = border;这里有四次:item.BorderWidth = width ;. –
现在你知道哪些行很慢!找出为什么。查看调用堆栈以查看线程停止在哪个函数中。我的猜测:IndexOf在一长串名单上。 – usr