Il codice di sotto legge un file binario e lo spezza in n file più piccoli.
Utilizza un Buffer di memoria.
Lanciando il programma ho osservato da Gestione Attività di Windows, l'occupazione di memoria ed ho visto che l'andamento dell'uso della memoria rispetto al tempo è una specie di sinusoide orizzontale, ossia un picco di memoria ed un rilascio, fino alla fine. Questo a 32bit
In un sistema a 64 bit con 8Gb di memoria, la memoria non viene rilasciata, ma viene occupata fino ad esaurire gli 8 G della RAM
Mi sapete dire cosa sbaglio nel codice?
Ciao
codice:Using r As Stream = File.Open(NomeFileInput, FileMode.Open, FileAccess.Read), br As New BinaryReader(r) Dim NumeroRecord As Long = r.Length Dim RighePagina As Long = 100000000 '500000 Dim Pagine As Integer = CInt(Math.Ceiling(CDbl(NumeroRecord) / CDbl(RighePagina))) For pagina As Integer = 1 To Pagine Dim inizio As Long = (pagina - 1) * RighePagina Dim length As Long = Math.Min(RighePagina, NumeroRecord - inizio) Dim fine As Long = inizio + length - 1 Dim NomeFileOutput As String = String.Format("c:\tmp\filepart_{0:0000}.dat", pagina) Dim buffer As Byte() = br.ReadBytes(CInt(length)) Using w As Stream = File.Open(NomeFileOutput, FileMode.Create, FileAccess.Write), bw As New BinaryWriter(w) bw.Write(buffer) 'bw.Flush() End Using Next End Using


Rispondi quotando