Ускорьте загрузку изображения от диска в формы окон (c#.net) приложение

Поскольку процесс JSR представляет более мертвый Java: http://www.infoq.com/news/2009/01/java7-updated

Это - позор, что даже существенные и давно известные дополнения как Закрытия не добавляются просто, потому что участники не могут договориться о реализации.

8
задан Kevin Wilson 23 December 2011 в 20:48
поделиться

6 ответов

Я наткнулся на эту страницу , которая описывает, как использовать GDI + API напрямую для загрузки изображений. Очень просто использовать:

ImageFast.FromFile(@"C:\MyPhoto.JPG");

Добавлен для демонстрации скорости ImageFast по сравнению с методом изображения из файла

Здесь используется исходный код, найденный здесь . Код был скопирован и вставлен и не требовал изменений.

Stopwatch watch = Stopwatch.StartNew();

string filePath = @"C:\TestImage25k.png";

Image fromFile = Image.FromFile(filePath);

watch.Stop();

Console.WriteLine("Image.FromFile     Ticks = {0:n}", watch.ElapsedTicks);

long fromFileTicks = watch.ElapsedTicks;

watch.Reset();
watch.Start();

Image fastImage = ImageFast.FromFile(filePath);

watch.Stop();

long fastFileTicks = watch.ElapsedTicks;

Console.WriteLine("ImageFast.FromFile Ticks = {0:n}", watch.ElapsedTicks);

Console.WriteLine("fromFileTicks - fastFileTicks = {0:n}", fromFileTicks - fastFileTicks);

Вывод на консоль был

Image.FromFile     Ticks = 19,281,605.00

ImageFast.FromFile Ticks = 7,557,403.00

fromFileTicks - fastFileTicks = 11,724,202.00

. Вы можете увидеть влияние ImageFast. Со временем эти 11 миллионов сохраненных тиков прибавятся.

9
ответ дан 5 December 2019 в 14:05
поделиться

Самым простым может быть размещение кнопок «следующий» и «предыдущий», чтобы ограничить количество изображений и предварительную загрузку.

1
ответ дан 5 December 2019 в 14:05
поделиться

Ознакомьтесь с концепцией двойной буферизации . Что вы хотите сделать, так это создать второй поток, который может загружать следующий набор изображений , а вы показываете первый набор. Как только сработает временной интервал 1/6, вы отключаете один набор изображений и начинаете загружать следующий набор.

1
ответ дан 5 December 2019 в 14:05
поделиться

Если у вас одновременно отображается 6 изображений и вы меняете их все каждые 1/6 секунды, вы должны столкнуться с проблемами производительности. Загрузка 150 Кб с диска должна быть тривиальной задачей даже без кеширования. Похоже, вы переусердствовали с загрузкой файлов. Вы уверены, что загружаете только 6 изображений за раз? Вы читаете изображения с диска, которые не отображаются?

Если вы можете предоставить более подробную информацию о потоке приложения,

0
ответ дан 5 December 2019 в 14:05
поделиться

Я бы, вероятно, создал фоновый поток для непрерывной выборки всех изображений с диска (чтобы пользовательский интерфейс оставался отзывчивым), а затем публиковал бы каждое вновь загруженное изображение через событие

0
ответ дан 5 December 2019 в 14:05
поделиться

Думаю, вам будет полезна концепция двойной буферизации. Установите для свойства формы "Double Buffer" значение True. Это вам немного поможет. Вам могут быть полезны следующие ссылки

1
ответ дан 5 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: