В настоящее время я работаю над приложением, которое позволяет пользователю воспроизводить (автоматически прокручивать) серию локальных изображений. Обычно на экране сразу пять или шесть человек.
Основным узким местом на данный момент является фактическая загрузка данных изображения с диска. Поток таймера требует, чтобы изображения обновлялись каждые 1/6 секунды, и приложение изо всех сил пытается не отставать от этой скорости. Каждое изображение составляет около 25 КБ.
Я пытался создать циклический кэш, чтобы попытаться предварительно загрузить изображения, но это также привело к тому, что оно само по себе застыло, и в итоге все так же замедлилось.
Каждый такт таймера, я зацикливаюсь на шести заполнителях изображений, загружая следующее изображение, используя стандартный
Image img = Image.FromFile("filename");
метод, но подумал, что кто-то может знать о более быстром способе извлечения образов с диска.
В каждом из шести комплектов содержится от 500 до 20000 изображений, поэтому он слишком велик, чтобы загрузить все это в память при запуске.
Если у кого-нибудь есть предложения по более быстрому способу перетаскивания этих изображений, это будет с благодарностью.
Отредактируйте, чтобы добавить более подробную информацию о потоке приложений.
Хорошо, вот что происходит:
Пользователь нажимает кнопку воспроизведения. Поток таймера начинается с тайм-аута 1/6 секунды.
Таймер обратного вызова:
Update image index (_index++)
for each viewer in list of visible viewers (the forms to display images)
{
get the filename from the id stored in the viewer
check to see if the file exists
if it does exist,
create new bitmap from image
and return that image
otherwise return null
if returned image isn't null, display it on screen
}
Очевидно, что это происходит через несколько слоев - загрузка изображения происходит на уровне сервисов и затем передается в презентацию, а затем в пользовательский интерфейс, но это суть происходящего.