Ho bisogno di caricare dinamicamente molte (a volte centinaia) di immagini in miniatura. Per motivi di prestazioni ho bisogno di farlo in un numero limitato di richieste, sto usando una singola richiesta/risposta per il test. Sto inviando i dati binari per le immagini nella risposta e caricandole in BitmapImage utilizzando un MemoryStream. Funziona correttamente finché non carico più di 80 anteprime, quindi ottengo l'eccezione Catastrophic Failure. Per assicurarmi che i miei dati non fossero corretti, ho provato a caricare un BitmapImage più volte con lo stesso array di byte e si blocca dopo circa 80 carichi.Silverlight: BitmapImage dal flusso genera eccezioni (errore irreversibile (Eccezione da HRESULT: 0x8000FFFF (E_UNEXPECTED)))
Ecco un esempio di come l'immagine viene caricata dalla matrice di byte, l'array di byte è noto per avere dati di immagine validi (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;
}
Ho quindi utilizzare il BitmapImage come fonte per un Elemento immagine sulla pagina, ma l'errore si verifica nella riga img.SetSource(...)
in alto.
L'aggiunta di GC.Collect()
al ciclo in cui sto caricando le immagini di anteprima mi consente di caricare qualche altra immagine, quindi penso che questo abbia a che fare con la gestione della memoria ma non so cosa posso fare per risolvere il problema .
Non sono sicuro se questo potrebbe essere il problema ma MemoryStream ha proprietà ReadTimeout e WriteTimeout. Il flusso potrebbe scadere? – Danexxtone
Ho provato a impostare ReadTimeout e ottenuto un'eccezione: i timeout non sono supportati su questo stream. – toby
Puoi chiarire alcune cose: perché un array di byte? Non c'è uno stream dal download che potresti alimentare direttamente a "img.SetSource"?Sei sicuro che i file scaricati siano di dimensioni "miniatura" o stai scaricando immagini più grandi che vengono ridimensionate dal controllo immagine? Sono queste miniature di foto? – AnthonyWJones