Я работаю над Генератором клеточных автоматов в .NET 3.5. Я решил использовать WPF, потому что хотел узнать что-то новое о WPF.
Я рисую Одномерные автоматы, такие как Правило 30, и Двумерные, например Жизнь .
Мне нужно что-то, чтобы быстро нарисовать много изображений.
] Например, размер сетки составляет 64 x 64, а размер ячейки - 12 пикселей. Итак, я рисую 64 * 64 = 4096 изображений за один шаг. И интервал между одним шагом составляет около 100 мс.
Я переписываю свое приложение на WinForms, и все в порядке. Но в WPF это медленно, и я не знаю почему.
Мой пример рисования в WPF:
У меня есть класс, производный от Image. В этом классе я рисую растровое изображение и использую его в свойстве Source.
public void DrawAll()
{
DrawingGroup dg = new DrawingGroup();
for (byte i = 0; i < this.DimensionX; ++i)
{
for (byte j = 0; j < this.DimensionY; ++j)
{
Piece p = this.Mesh[i][j];
Rect rect = new Rect(j * this.CellSize + (j + 1), i * this.CellSize + (i + 1),
this.CellSize, this.CellSize);
ImageDrawing id = new ImageDrawing();
id.Rect = rect;
if (p == null)
id.ImageSource = this._undefinedPiece.Image.Source;
else
id.ImageSource = p.Image.Source;
dg.Children.Add(id);
}
}
DrawingImage di = new DrawingImage(dg);
this.Source = di;
}
Второй пример рисования в WPF:
Я унаследовал класс от Canvas и переопределил функцию OnRender. На основе этой статьи: http: // sachabarber.