Si transmite su copia, es decir, lee un búfer, escribe un búfer, lee un búfer, escribe un búfer, etc. hasta que se le acaben los datos, solo necesitará tanta memoria como el tamaño del búfer. Espero que File.Copy haga esto (en el código nativo de Windows).
Si desea hacerlo usted mismo, usar algo como esto:
public void CopyData(Stream input, Stream output)
{
byte[] buffer = new byte[32 * 1024];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}
Esto sólo se llevará a 32K por grande que la corriente es.
EDITAR: Como se señala en los comentarios, las transmisiones también pueden tener sus propios búferes, pero el punto es que aún se puede transferir un archivo muy grande sin quedarse sin memoria.
¡Buena pregunta! :) – overslacked