У меня проблемы с производительностью рисования WPF. Есть много маленьких объектов EllipseGeometry (например, 1024 эллипса), которые добавляются к трем отдельным GeometryGroups с различными кистями переднего плана. После этого я делаю все это на простом управлении Image. Код:Производительность рисования WPF с большим количеством геометрий
DrawingGroup tmpDrawing = new DrawingGroup();
GeometryGroup onGroup = new GeometryGroup();
GeometryGroup offGroup = new GeometryGroup();
GeometryGroup disabledGroup = new GeometryGroup();
for (int x = 0; x < DisplayWidth; ++x)
{
for (int y = 0; y < DisplayHeight; ++y)
{
if (States[x, y] == true) onGroup.Children.Add(new EllipseGeometry(new Rect((double)x * EDGE, (double)y * EDGE, EDGE, EDGE)));
else if (States[x, y] == false) offGroup.Children.Add(new EllipseGeometry(new Rect((double)x * EDGE, (double)y * EDGE, EDGE, EDGE)));
else disabledGroup.Children.Add(new EllipseGeometry(new Rect((double)x * EDGE, (double)y * EDGE, EDGE, EDGE)));
}
}
tmpDrawing.Children.Add(new GeometryDrawing(OnBrush, null, onGroup));
tmpDrawing.Children.Add(new GeometryDrawing(OffBrush, null, offGroup));
tmpDrawing.Children.Add(new GeometryDrawing(DisabledBrush, null, disabledGroup));
DisplayImage.Source = new DrawingImage(tmpDrawing);
Он отлично работает, но занимает слишком много времени -> 0.5с на Core 2 Quad,> 2s на Pentium 4. Мне нужно < 0.1s везде. Все эллипсы, как вы можете видеть, равны. Фон управления, где мой DisplayImage, твердый (например, черный), поэтому мы можем использовать этот факт. Я попытался использовать 1024 элемента Ellipse вместо Image с EllipseGeometries, и он работал намного быстрее (~ 0,5 с), но этого недостаточно. Как ускорить его?
С уважением, Олег Еремеев
P.S. Извините за мой английский.
Не нужно извиняться за ваш английский. –
Вы пытались использовать WPF Performance Suit, чтобы узнать, что занимает большую часть времени? – levanovd
Спасибо, levanovd, но я знаю, что мой код неверен, этого достаточно. Я спрашиваю о совершенно другом подходе. –