Если вы выполняете потоковое копирование, то есть читаете буфер, пишете буфер, читаете буфер, пишете буфер и т. Д., Пока у вас не закончатся данные, это займет столько же памяти, сколько размер буфера. Я ожидаю, что File.Copy сделает это (в родном коде Windows, по общему признанию).
Если вы хотите сделать это самостоятельно, используйте что-то вроде этого:
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);
}
}
Это займет всего 32 КБ, как бы ни был велик поток.
РЕДАКТИРОВАТЬ: Как отмечалось в комментариях, потоки также могут иметь свои собственные буферы, но дело в том, что вы все равно можете передавать очень большой файл без нехватки памяти.