У меня есть System.Windows.Controls.Canvas, на который я программно помещаю System.Windows.Shapes.Polygon:
private Canvas mMainCanvas = new Canvas();
private Polygon mHistogram = new Polygon();
Позже я обновляю многоугольник с очень большим количеством событий (~ 1 000 000 или около того). Я пытался сделать это как можно быстрее и эффективнее (борьба сама по себе). Моя последняя попытка состояла в том, чтобы накапливать значения в PointCollection и периодически переустанавливать коллекцию Polygon (mHistogram):
int i = 10000;
PointCollection mPc = new PointCollection(256);
double y;
Point p;
private void EventProcessor( int bin ) {
if (0 < i--) {
p = mPc[bin];
y = p.Y + 1;
p.X = p.X;
p.Y = y;
mPc[bin] = p;
if (mMainCanvas.Height < p.Y)
mMainCanvas.Height = p.Y;
}
else {
i = 10000;
mHistogram.Points = new PointCollection( mPc ); /* This works if mPc
is a PointCollection.
It does not work if
mPc is a Point[]
}
}
Кажется, это работает нормально, хотя все еще недостаточно быстро. Итак, я изменил тип mPc с PointCollection на простой массив точек (Point[]), надеясь, что это немного ускорит доступ. Однако, когда я это делаю, мой многоугольник (мгистограмма) вообще не обновляется.
Это сбивает меня с толку. Я создаю новую коллекцию PointCollection из IEnumerable (mPc), которая должна создать новую коллекцию PointCollection, которая ведет себя так же, как и любая другая коллекция PointCollection. Почему он ведет себя по-другому при создании с помощью массива (точка [])?
Спасибо.