У меня есть некоторые проблемы с производительностью в моем коде ...
Мне нужно визуализировать разноцветные прямоугольники в DrawingVisual.
Первая версия проста:
using (DrawingContext dc = Canvas.RenderOpen())
{
for (Int32 x = 0; x < widthCount; x++)
for (Int32 y = 0; y < heightCount; y++)
{
Color c;
Double value = mass[x, y];
c = GetColorByValue(value);
dc.DrawRectangle(new SolidColorBrush(c), null,
new Rect(x * step - step / 2, y * step - step / 2, step, step));
}
}
И работает нормально, если количество прямоугольников составляет около 250х250 (и получает 200 МБ ОЗУ). Но если их число составляет 750x750, процесс рендеринга будет слишком длинным и медленным (получает более 2,5 ГБ ОЗУ)
Следующим шагом было использование растрового изображения, такого как буфер. Но есть проблема с размером моего DrawingVisual. Визуальный действительно большой.
Поэтому невозможно создать полноразмерное растровое изображение, потому что конструктор RenderTargetBitmap выдает исключение «Данные изображения вызвали переполнение во время обработки».
Наконец я создал небольшое растровое изображение и растянул его до своего визуального объекта. Однако проблема та же (она работает слишком медленно и получает много оперативной памяти).
Что я должен сделать, чтобы процесс рендеринга элементов получил достаточное время и источники?
Привет!
Спасибо!