Я пытаюсь понять, почему мои изображения не являются быстрыми, поэтому я создал пример для проверки производительности WPF. Я использовал таймер, чтобы вычислить, как долго выполнялся мой обработчик событий «отображения изображений», и использовал секундомер, чтобы измерить, сколько времени потребовалось для отображения изображений на экране. Итог: при отображении 100, 1600, 2500 и 3600 изображений WPF потребовалось 2, 9, 12 и 16 секунд после , когда мой код завершил отображение изображений на экране. Поэтому я чувствую себя беспомощным: кажется, я не могу улучшить свой код, чтобы заставить изображения появляться быстрее - мне нужно что-то сделать с WPF!
Итак, мой вопрос: Что мне нужно сделать по-другому, чтобы ускорить отображение изображений?
Настройка теста проста:
Окно содержит сетку. После нажатия кнопки «Тест» добавляются определения строк и столбцов. Затем изображение добавляется в каждую ячейку сетки следующим образом:
var image = new Image();
image.BeginInit();
image.Name = ImageNameFromCell(theRow, theColumn);
image.Stretch = Stretch.None;
image.HorizontalAlignment = HorizontalAlignment.Center;
image.VerticalAlignment = VerticalAlignment.Center;
RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.LowQuality);
image.EndInit();
theGrid.Children.Add(image);
Наконец, для источника каждого изображения задано растровое изображение: изображение в оттенках серого уже уменьшено до предполагаемого размера экрана. Растровое изображение генерируется следующим образом:
var smallerBitmapImage = new BitmapImage();
smallerBitmapImage.BeginInit();
smallerBitmapImage.DecodePixelWidth = (int)(theImageWidth);
smallerBitmapImage.UriSource = theUri;
smallerBitmapImage.CacheOption = BitmapCacheOption.None;
smallerBitmapImage.EndInit();
//BitmapFrame bitmapFrame = BitmapFrame.Create(this.FullPath);
var convertedBitmap = new FormatConvertedBitmap();
convertedBitmap.BeginInit();
convertedBitmap.Source = smallerBitmapImage;
convertedBitmap.DestinationFormat = PixelFormats.Gray16;
convertedBitmap.EndInit();
convertedBitmap.Freeze();
Итак, я в своем уме. Изображения появляются с заметной задержкой, и это, кажется, вне моего контроля. Что я могу сделать?