2015-12-15 3 views
0

Привет Я работаю в приложении, где мы предоставляем возможность пользователю изменять свой профиль.Как избежать OutOfMemoryException при использовании BinaryReader

Я использую управление загрузкой файлов для выбора файлов. Он позволяет макс. 100 МБ.

Но я ограничиваю размер изображения до 30 Мб. Загрузка изображений до 20 МБ без проблем. Когда он выше 20 МБ, он отображает OutOfMemoryException. Я использую BinaryReader для сохранения изображений.

var file = context.Request.Files[0]; 
if (!Directory.Exists(Folder)) 
{ 
    Directory.CreateDirectory(Folder); 
} 

if (file.ContentLength != 0) 
{ 
    if (Directory.Exists(targetFolder + "\\" + context.Request["Name"]) == false) 
    { 
     Directory.CreateDirectory(targetFolder + "\\" + context.Request["Name"]); 
    } 

    var binaryReader = new BinaryReader(file.InputStream); 
    var memoryBytes = binaryReader.ReadBytes(file.ContentLength); 
    using (var memoryStream = new MemoryStream(memoryBytes)) 
    { 
     var imageStream = Image.FromStream(memoryStream); 
     imageStream.Save(targetFolder + "\\" + context.Request["Name"] + "\\" + "picture" + ".png" , ImageFormat.Png); 
    } 
} 

Есть ли ошибки, которые я сделал ?? Или предложите любой другой способ сохранить изображение.

Заранее благодарен! Любая помощь будет оценена по достоинству.

+0

Возможно, этот ответ дает вам некоторую идею http://stackoverflow.com/a/8613300/2263683 –

+0

Вероятно, не будет исправлена ​​ваша проблема, но разве вы не должны закрывать этот 'BinaryReader'? Или используйте его в инструкции 'using'. Довольно уверен, что он реализует 'IDisposable', поэтому у вас может быть утечка. –

+0

Я использовал BinaryReader, используя, но проблема не исправлена. Я получаю то же исключение. – Shesha

ответ

0

Вы должны использовать using(binaryReader){} или читатель должен утилизировать после использования (с, используя вызовы Dispose() после того, как с помощью-блок остается, даже если код генерирует исключение):

using(binaryReader = new BinaryReader(file.InputStream)) 
      { 
       var memoryBytes = binaryReader.ReadBytes(file.ContentLength); 
       using (var memoryStream = new MemoryStream(memoryBytes)) 
       { 
        var imageStream = Image.FromStream(memoryStream); 
        imageStream.Save(targetFolder + "\\" + context.Request["Name"] + "\\" + "picture" + ".png", ImageFormat.Png); 
       } 
      } 
+0

Я пробовал это. Но я получаю то же OutOfMemoryException. :( – Shesha

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