Поскольку процесс JSR представляет более мертвый Java: http://www.infoq.com/news/2009/01/java7-updated
Это - позор, что даже существенные и давно известные дополнения как Закрытия не добавляются просто, потому что участники не могут договориться о реализации.
Я наткнулся на эту страницу , которая описывает, как использовать 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 миллионов сохраненных тиков прибавятся.
Самым простым может быть размещение кнопок «следующий» и «предыдущий», чтобы ограничить количество изображений и предварительную загрузку.
Ознакомьтесь с концепцией двойной буферизации . Что вы хотите сделать, так это создать второй поток, который может загружать следующий набор изображений , а вы показываете первый набор. Как только сработает временной интервал 1/6, вы отключаете один набор изображений и начинаете загружать следующий набор.
Если у вас одновременно отображается 6 изображений и вы меняете их все каждые 1/6 секунды, вы должны столкнуться с проблемами производительности. Загрузка 150 Кб с диска должна быть тривиальной задачей даже без кеширования. Похоже, вы переусердствовали с загрузкой файлов. Вы уверены, что загружаете только 6 изображений за раз? Вы читаете изображения с диска, которые не отображаются?
Если вы можете предоставить более подробную информацию о потоке приложения,
Я бы, вероятно, создал фоновый поток для непрерывной выборки всех изображений с диска (чтобы пользовательский интерфейс оставался отзывчивым), а затем публиковал бы каждое вновь загруженное изображение через событие
Думаю, вам будет полезна концепция двойной буферизации. Установите для свойства формы "Double Buffer" значение True. Это вам немного поможет. Вам могут быть полезны следующие ссылки