Использование памяти ASP.net при загрузке

На сайте ASP.net на моем рабочем месте следующий фрагмент кода отвечает за загрузку файлов (ПРИМЕЧАНИЕ. Response.TransmitFile здесь не используется, поскольку содержимое загрузки передается из 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();
}

Наши пользователи часто загружают файлы размером в несколько сотен МБ, которые могут довольно быстро загружать серверную память. Я предполагаю, что это связано с буферизацией ответа. Это имеет смысл?

мы только что прочитали обуфер» свойство объекта Response. Если я установлю это в false, это предотвратит вызовы Response.BinaryWrite () для буферизации данных в памяти? В общем, что является хорошим способом ограничения использования памяти в этой ситуации? Возможно, мне следует выполнить потоковую передачу из zip во временный файл, а затем вызвать Response.TransmitFile ()?

РЕДАКТИРОВАТЬ: В дополнение к возможным решениям, яЯ очень заинтересован в объяснениях проблемы использования памяти, представленной в коде выше. Почему это потребляет гораздо больше, чем 1 МБ, даже если Response.Flush вызывается на каждой итерации цикла? Это просто ненужное выделение кучи, которое происходит на каждой итерации цикла (и неполучить GC 'сразу), или есть что-то еще на работе?

Ответы на вопрос(1)

Ваш ответ на вопрос