Necesito cargar dinámicamente muchas (a veces cientos) de imágenes en miniatura. Por razones de rendimiento, debo hacer esto en un número limitado de solicitudes, estoy usando una sola solicitud/respuesta para las pruebas. Enviaré los datos binarios para las imágenes en la respuesta y las cargaré en BitmapImage utilizando un MemoryStream. Esto funciona correctamente hasta que cargue más de aproximadamente 80 miniaturas, luego obtengo la excepción de falla catastrófica. Para asegurarme de que mis datos no estaban corruptos, traté de cargar una imagen de mapa de bits varias veces con la misma matriz de bytes y se bloquea después de aproximadamente 80 cargas.Silverlight: BitmapImage from stream throws exception (Error catastrófico (Excepción de HRESULT: 0x8000FFFF (E_UNEXPECTED)))
Este es un ejemplo de cómo la imagen se carga desde la matriz de bytes, la matriz de bytes se sabe que tiene datos de imagen válidos (PNG):
private BitmapImage LoadImage(byte[] imageData)
{
BitmapImage img = new BitmapImage();
MemoryStream stream = new MemoryStream(imageData);
img.SetSource(stream); // Exception thrown here after too many images loaded.
return img;
}
entonces utilizo el BitmapImage como fuente para una Elemento de imagen en la página, pero el error ocurre en la línea img.SetSource(...)
arriba.
Al agregar GC.Collect()
al bucle donde estoy cargando imágenes en miniatura, me permite cargar algunas imágenes más, así que estoy pensando que esto tiene algo que ver con la administración de memoria, pero no sé qué puedo hacer para solucionar el problema .
no estoy seguro de si esto podría ser el problema, pero sí que tiene MemoryStream ReadTimeout y WriteTimeout propiedades. ¿Podría la transmisión ser el tiempo de espera? – Danexxtone
Intenté configurar ReadTimeout y obtuve una excepción: los tiempos de espera no son compatibles con esta secuencia. – toby
¿Puedes aclarar algunas cosas: por qué una matriz de bytes? ¿No hay una transmisión de la descarga que pueda enviar a 'img.SetSource' directamente?¿Está seguro de que los pngs que se están descargando son de tamaño "miniatura" o está descargando imágenes más grandes que están siendo escaladas por el control de imagen? ¿Son estas miniaturas de fotos? – AnthonyWJones