2013-07-05 4 views
3

Моего кода:OutOfMemory при загрузке файлов

int chunk = Request["chunk"] != null ? int.Parse(Request["chunk"]) : 0; 
string fileName = Request["name"] != null ? Request["name"] : string.Empty; 
Response.Write(Request.Files.Count); 
HttpPostedFile fileUpload = Request.Files[0]; 

var uploadPath = Server.MapPath("~/uploaded-files"); 
if (Request.QueryString["originals"] == "yes") 
{ 
    using (var fs = new FileStream(Path.Combine(uploadPath, fileName), chunk == 0 ? FileMode.Create : FileMode.Append)) 
    { 
     var buffer = new byte[fileUpload.InputStream.Length]; 
     fileUpload.InputStream.Read(buffer, 0, buffer.Length); 
     fs.Write(buffer, 0, buffer.Length); 
    } 
} 

Я получаю сообщение об ошибке 'System.OutOfMemoryException'.

Моя машина имеет 4 гигабайта оперативной памяти. Этот файл составляет приблизительно 1 ГБ. Я использую plUpload для загрузки.

Я включил переключатель 3GB. Нет разницы. У меня много оперативной памяти, почему у меня заканчивается память? Существует ли альтернативный подход, который использует меньше памяти?

+0

Чтение и запись его на куски, а не все сразу? –

+0

Попробуйте выполнить компиляцию для целевой платформы x64. – Igor

+0

Вы перепутали свои настройки httpRuntime в config? HttpPostedFile должен буферизовать на диск, если он превышает 256 КБ, если вы не увеличили requestLengthDiskThreshold. –

ответ

4

Альтернативная реализация будет использовать SaveAs на HttpPostedFile:

fileUpload.SaveAs(Path.Combine(uploadPath, fileName)); 
+0

Отлично! Это делает трюк, я все еще собираюсь заглянуть в загрузку кусков, но пока это работает! –

Смежные вопросы