Un programma che fa un mestiere di quel genere non ha il diritto di "mangiare" più di qualche KB di memoria. Perché leggi e scrivi a blocchi delle dimensioni del file di destinazione? Stai sprecando una marea di memoria per niente, visto che non ti serve a nulla caricare così tanta roba in memoria in una volta.
Usa un buffer di dimensioni fissate (16 KB va più che bene) e usa il metodo Read del BinaryReader per leggere di volta il pezzettino di file.

Rispondi quotando
