WPF Image Control медленно обновляется с большими изображениямиC#

Место общения программистов C#
Ответить
Anonymous
 WPF Image Control медленно обновляется с большими изображениями

Сообщение Anonymous »

Я пытаюсь обновить элемент управления Image в WPF всякий раз, когда извлекаются новые данные изображения. Я работаю с 16-битными изображениями RAW размером 1500x1500 (около 5 МБ каждое), и время обновления в среднем составляет около 22 мс, что кажется медленным для моего варианта использования.
В настоящее время я загружаю изображения последовательно в фоновой задаче и обновляю пользовательский интерфейс следующим образом:

Код: Выделить всё

while (!cancelToken.IsCancellationRequested)
{
cancelToken.ThrowIfCancellationRequested();

if (imageCounter > 359)
imageCounter = 0;

//_memoryMappedViewAccessor.ReadArray(0, imageData, 0, imageData.Length);
string path = $"{basePath}img{imageCounter++:D4}.raw";
frame = ImageHelper.LoadImageRaw(path, Size, Size);

await Application.Current.Dispatcher.InvokeAsync(() =>
{
_writeableBitmap.Lock();
_writeableBitmap.WritePixels(_rect, frame.Data, locStride, 0);
_writeableBitmap.Unlock();
ImageDisplay = _writeableBitmap;

_frameCounter.Count();
}, DispatcherPriority.Background, cancelToken);

}
Чтение данных и запись в WriteableBitmap занимает около 2–3 мс, что и ожидалось. Однако все обновление занимает около 22 мс, что означает, что внутренняя перерисовка элемента управления Image для изображений такого типа занимает около 19 мс.
Я также использовал изображения большего размера. 3000х3000. Это привело к снижению скорости в 4 раза (всего ~80 мс, 8 мс на загрузку данных), что, по крайней мере, кажется правдоподобным, учитывая относительный размер.
Кроме того, я заметил, что отображение изображений происходит намного быстрее при запуске приложения с помощью отладчик подключен.
Является ли такая производительность типичной для элемента управления WPF Image с большими изображениями? Или я делаю что-то не так в своем подходе (особенно потому, что подключение отладчика, кажется, ускоряет отрисовку изображения, что странно), которое можно оптимизировать для более быстрых обновлений?

Подробнее здесь: https://stackoverflow.com/questions/790 ... rge-images
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»