2015-02-17 3 views
3

Я пытаюсь разархивировать файл, используя код ниже.Использование памяти в выпуске IIS не выпущено

public static void UnZip(string zipFile, string folderPath) 
{ 
    using (ZipArchive zip = new ZipArchive()) 
    { 

     //Loads the zip file. 
     zip.Open(Path.GetFullPath(zipFile)); 

     //Saving the contents of zip file to disk. 
     for (int i = 0; i < zip.Count; i++) 
     { 
      using (ZipArchiveItem item = zip[i]) 
      { 
       if (!Directory.Exists(folderPath)) 
        Directory.CreateDirectory(folderPath); 
       string itemName = folderPath + item.ItemName; 
       using (FileStream fs = new FileStream(itemName, FileMode.OpenOrCreate, 
                 FileAccess.ReadWrite)) 
       { 
        MemoryStream ms = item.DataStream as MemoryStream; 
        ms.WriteTo(fs); 
        fs.Flush(); 
        ms.Close(); 
       } 
      } 
     } 
    zip.Close(); 
    } 
} 

Мой Выпуск:

Я опубликовал свой веб-проект и размещение в IIS Express-8. При вызове этого метода UnZip использование памяти достигает более 600MB, и оно никогда не выпадало из метода более одного часа. поэтому, если я снова вызываю тот же метод, я получаю ошибку MemoryOutOfException, потому что по умолчанию iis express имеет 800MB, поэтому я получаю ошибку.

Я не хочу увеличивать объем памяти IIS Express. Может быть, я допустил ошибку в своем коде, но я не могу найти проблему.

Помогите найти проблему и решить мою проблему.

+0

Нет смысла называть 'fs.Dispose()' когда вы инициализируете 'fs' в блоке' using', который автоматически вызовет 'Dispose()' автоматически. – haim770

+0

Оберните свой MemoryStream с помощью блока – Sievajet

+0

Я тоже попытался в этом случае .... но не работает @sievajet – MarHserus

ответ

0

Я бы поставил «zip.Close();» внутри, используя блок

+0

Извините, я неправильно набрал вопрос. Теперь я отредактирован правильно. @Роберт – MarHserus

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