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