Scritto da
Non Autenticato
il 2017-05-07 15:56:08.0 alle 2017-05-07 15:56:08.0
Programmazione: quando in memoria devi gestire dati di grosse dimensioni
Io di solito le immagini che vengono caricate dagli utenti di un sito le conservo nel database (nel filesystem solo le immagini del sito in sé), poi quando devono essere renderizzate in una pagina le estraggo dal database e converto i dati binari in dati base 64 poi possono essere usate in HTML per renderizzare le immagini.
Il problema è che nel sito che sto sviluppando voglio permettere di caricare immagini fino a 30 MB... che non sono tanti, ma sono già abbastanza per creare problemi quando caricati nella memoria volatile.
Facendo l'operazione di creare una codifica in base 64 delle immagini si vengono a creare delle stringhe mastodontiche, che poi quando concatenate insieme dal serializzatore JSON danno origine a una stringa troppo grande, che causa un OutOfMemoryException.
Se anziché caricare tutte le immagini insieme, né caricassi una alla volta (con request separate) eviterei l'OutOfMemoryException (quindi il problema lato server), ma poi se ne viene a creare uno lato client: a quanto pare per google chrome anche una sola di quelle stringhe è già troppo, visto che quando arriva la response dal server si freeza.
Chiaramente il problema si potrebbe aggirare mantenendo le immagine nel filesystem anziché nel database, ma visto che mantenere file nei database è una cosa che si usa fare... ci sarà pur un modo per evitare di spaccare la memoria volatile, no?