Da qualche tempo utilizzo un componente free anzi opensource per creare e gestire file Zip in ASP.NET. Il componente / libreria si chiama SharpZipLib, e fino a stamattina andava alla perfezione.
Il mio più grande errore è stato cercare info all’estero su questo componente. Comunque con un po’ di fatica, l’ho implementato e gli zip li fa proprio per bene. Il problema però, non appena il mio prodotto ha iniziato a essere utilizzato bene, è saltato subito all’occhio (del sistemista).
Con file di grosse dimensioni finiva la RAM e il server piazzava un bel memory overflow, o più esattamente: (mscorlib)Insufficient system resources exist to complete the requested service
Disperato, e quasi convinto di dover trovare un altro componente, fortunatamente ho pensato agli amici di HTML.it, e tramite loro ho scoperto il sito .Net2theMax.it!
La spiegazione di tutte le righe la trovate su .net2theMax.it, io voglio solo fare un appunto su qualche riga. La mia precedente procedura prendeva il file da comprimere, e lo sbatteva in un array di byte (più o meno) in questo modo:
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
Praticamente tutto il file in memoria. In una unica botta. Ma se il file è parecchi mega? Fortunatamente la soluzione non era cambiare componente ma sistemare il buffer:
while (fs.Position < fs.Length)
{
bytesRead = fs.Read(mBuffer, 0, mBuffer.Length);
zip.Write(mBuffer, 0, bytesRead);
crc.Update(mBuffer, 0, bytesRead);
}
E il mondo per un po’ a reiniziato a sorridere. Grazie a tutti e al mio amico Franz.
zio biscio!
ehi john suppongo sia una approvazione, vero?
Ciao, mi sapresti dire se c’è qualche componente free che partendo da un file zip riesco a creare un file autoestraente .exe sempre in Asp.Net?
Grazie mille
Così al volo ho trovato:
http://www.componentace.com/sfx-zip-c-sharp.htm
http://www.example-code.com/csharp/csCreateSfx2.asp
Ma mi sa che sono a pagamento… però forse con lo stesso sharpziplib puoi fare qualcosa, tipo usare la sua community:
http://community.sharpdevelop.net/search/SearchResults.aspx?q=self+extracting&s=12
Ciao e tienimi aggiornato!