Какие меры предосторожности следует предпринять при обработке больших передач файлов в ASP.NET?
Мое приложение ASP.NET позволяет пользователям загружать и скачивать большие файлы. Обе процедуры включают чтение и запись файловых потоков. Что я должен сделать, чтобы приложение не зависало и не зависало при обработке большого файла? Должны ли файловые операции обрабатываться, например, в рабочем потоке?
2 ответа
Убедитесь, что вы правильно буферизуете файлы, чтобы они не занимали чрезмерное количество памяти в системе.
например, выдержка из загружаемого приложения внутри цикла while, который читает файл:
// Read the data in buffer.
length = iStream.Read(buffer, 0, bufferSize);
// Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length);
Там, где bufferSize является чем-то разумным, например, 100000 байт, компромисс заключается в том, что он будет медленнее для меньших размеров буфера.
http://support.microsoft.com/kb/812406
Изменить: Также убедитесь, что IIS настроен на достаточно большую длину запроса (IIS7) и время ожидания.
Если это не является основной целью вашего сайта, рассмотрите возможность разделения этих операций на отдельное приложение, например, на субприложение или субдомен. Помимо снижения риска это также упростит масштабирование по мере роста вашей пользовательской базы.