Uso de memória do ASP.net durante o download

Em um site ASP.net no meu local de trabalho, o seguinte pedaço de código é responsável por manipular downloads de arquivos (NOTA: Response.TransmitFile não é usado aqui porque o conteúdo do download está sendo transmitido por um arquivo zip):

private void DownloadFile( Stream stream)
{
        int bytesRead;
        int chunkSize = 1048576; //1MB

        byte[] readBuffer = new byte[chunkSize];
        while ((bytesRead = stream.Read(readBuffer, 0, readBuffer.Length)) != 0)
            {
                if(!Response.IsClientConnected)
                    break;
                byte[] chunk = new byte[bytesRead];
                Array.Copy(readBuffer,0,chunk,0,bytesRead);
                Response.BinaryWrite(chunk);
                Response.Flush();
        }
        stream.Close();
}

Nossos usuários baixam frequentemente arquivos com centenas de MB, o que pode aumentar a memória do servidor rapidamente. Minha suposição é que isso se deve ao buffer de resposta. Isso faz sentido?

Acabei de ler sobre a propriedade 'buffer' do objeto Response. Se eu definir como false, isso impedirá que as chamadas Response.BinaryWrite () armazenem em buffer os dados na memória? Em geral, qual é uma boa maneira de limitar o uso de memória nessa situação? Talvez eu deva transmitir do zip para um arquivo temporário e depois chamar Response.TransmitFile ()?

EDIT: Além das possíveis soluções, estou muito interessado em explicações sobre o problema de uso de memória presente no código acima. Por que isso consumiria muito mais que 1 MB, mesmo que o Response.Flush seja chamado em todas as iterações de loop? É apenas a alocação de heap desnecessária que ocorre em todas as iterações de loop (e não recebe o GC imediatamente) ou há algo mais no trabalho?

questionAnswers(1)

yourAnswerToTheQuestion