Streaming de um arquivo zip sobre http em .net com SharpZipLib

Estou criando um serviço de download simples para que um usuário possa baixar todas as suas imagens do site. Para fazer isso, basta compactar tudo no fluxo http.

No entanto, parece que tudo está armazenado na memória e os dados não são enviados até o arquivo zip estar completo e a saída fechada. Quero que o serviço comece a enviar de uma só vez e não use muita memóri

public void ProcessRequest(HttpContext context)
{
    List<string> fileNames = GetFileNames();
    context.Response.ContentType = "application/x-zip-compressed";
    context.Response.AppendHeader("content-disposition", "attachment; filename=files.zip");
    context.Response.ContentEncoding = Encoding.Default;
    context.Response.Charset = "";

    byte[] buffer = new byte[1024 * 8];

    using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipOutput = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(context.Response.OutputStream))
    {
        foreach (string fileName in fileNames)
        {
            ICSharpCode.SharpZipLib.Zip.ZipEntry zipEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(fileName);
            zipOutput.PutNextEntry(zipEntry);
            using (var fread = System.IO.File.OpenRead(fileName))
            {
                ICSharpCode.SharpZipLib.Core.StreamUtils.Copy(fread, zipOutput, buffer);
            }
        }
        zipOutput.Finish();
    }

    context.Response.Flush();
    context.Response.End();
}

Consigo ver a memória do processo do operador crescer enquanto cria o arquivo e, em seguida, libera a memória quando o envio é concluído. Como faço isso sem usar muita memória?

questionAnswers(4)

yourAnswerToTheQuestion