Actualmente estoy trabajando en una aplicación que permite al usuario jugar (desplazarse automáticamente) a través de una serie de imágenes locales. Por lo general, habrá cinco o seis en la pantalla a la vez.Acelerar la carga de una imagen desde el disco en una aplicación Windows Forms (C# .net)
El principal cuello de botella en este momento parece ser la carga real de los datos de imagen del disco. Un hilo del temporizador requiere que las imágenes se actualicen cada 1/6 de segundo y la aplicación tiene problemas para mantenerse al ritmo de esa velocidad. Cada imagen tiene alrededor de 25 Kb.
Intenté crear una memoria caché rodante para probar y cargar las imágenes, pero esto también se quedó atrapado consigo mismo, por lo que terminé desacelerándose tanto.
Cada latido del temporizador, estoy bucle a través de los seis marcadores de imagen cargar la siguiente imagen con el estándar método
Image img = Image.FromFile("filename");
pero pensó que alguien pudiera conocer de una manera más rápida para obtener las imágenes de disco.
Hay entre 500 y 20,000 imágenes en cada uno de los seis juegos, por lo que es demasiado grande para cargar todo en la memoria al inicio.
Si alguien tiene sugerencias para una forma más rápida de pasar estas imágenes, sería muy apreciado.
Edite para agregar más detalles sobre el flujo de la aplicación.
Vale, esto es lo que está pasando: botón de 'play' éxitos
usuario. El hilo del temporizador comienza con un tiempo de espera de 1/6 segundos.
temporizador de devolución de llamada:
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
}
Eso es, obviamente, va a través de unas pocas capas - la carga de imágenes que ocurre en la capa de servicios y luego pasa esto a través de la presentación y luego a la interfaz de usuario, sino que es la esencia de lo que está sucediendo .
Escribí una aplicación de prueba rápida para probar esto, y el ImageFast es más rápido en 11 millones de tics. El archivo from the Image toma 19 millones mientras que el ImageFast solo toma 7 millones. –
Gracias por los resultados de las pruebas, David :) – bernhof
No hay problema. Me gustan los resultados de ImageFast. –