Не ясно, какой интерфейс вы используете (WPF, WinForms), но вы можете использовать много ресурсов с вашим текущим кодом.Методы getEdges()
и / или getPoint()
могут быть дорогостоящими, и вы вызываете эти методы много .
Если есть результат метода, который вы собираетесь использоватьповторное использование: сохранить его в переменной.Вот как будет выглядеть ваш код:
public void drawObjects()
{
pAux = selectedPen;
for (int i = 0; i < objects.Count; i++)
{
var currentObject = objects[i];
var edges = currentObject.getEdges();
for(int ed = 0; ed < edges.Count; ed++)
{
var currentEd = edges[ed];
var edPoint1 = currentEd.getPoint1();
var edPoint2 = currentEd.getPoint2();
frontGraphics.DrawRectangle(recPen, (edPoint1.X + 332), -(edPoint1.Y - 170), 2, 2);
rightGraphics.DrawRectangle(recPen, edPoint1.Z + 332, -(edPoint1.Y - 170), 2, 2);
topGraphics.DrawRectangle(recPen, edPoint1.X + 332, -(edPoint1.Z - 170), 2, 2);
pAux = currentObject.selected ? selectedPen : linePen;
frontGraphics.DrawLine(pAux, edPoint1().X + 332, -(edPoint1().Y -170), edPoint2.X + 332, -(edPoint2.Y -170));
rightGraphics.DrawLine(pAux, edPoint1.Z + 332, -(edPoint1.Y - 170), edPoint2.Z + 332, -(edPoint2.Y - 170));
topGraphics.DrawLine(pAux, edPoint1.X + 332, -(edPoint1.Z - 170), edPoint2.X + 332, -(edPoint2.Z - 170));
}
}
}
Редактировать: , как упоминалось @ Hans Kesting , эта строка во внутреннем цикле лишняя:
if (objects[i].getEdges().Count > 0)
Это всегда будет равно true
, поскольку вы попали во внутренний цикл.
PS: Обратите внимание, что это может решить не все ваши проблемы с производительностью, но яуверен, что это поможет.