2013-10-25 116 views
2

我有一個非常簡單的程序,使用DotNetZip(最新版本)與C#.Net,VS2010。當它試圖保存已經壓縮的文件時,它已經開始掛起。沒有錯誤信息,沒有任何東西。它運行良好很長一段時間,然後突然開始顯示這種間歇性症狀。我在MS Server 2003上使用批處理系統運行它,但我在Win7上測試它。兩個系統都會產生間歇性故障。大約80%的時間失敗。DotNetZip間歇掛起

想法?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Ionic.Zip; 

namespace ZipUpSourceFiles 
    { 
    class Program 
     { 
     static void Main(string[] args) 
      { 
      string YYYYMMM = DateTime.Today.ToString("yyyy-MMM"); 
      string TargetPath = @"\\winntdom\root\common\xxx\secure\Construction\Access\All Database Backup\" + YYYYMMM + @"_Backup\"; 
      string SourcePath = @"\\winntdom\root\common\xxx\secure\Construction\Access\YYYY\"; 
      string ZipName=DateTime.Today.ToString("yy-MM-dd") + @".zip"; 
      string ZipWithPath = TargetPath + ZipName; 

      if (!System.IO.Directory.Exists(TargetPath)) 
       { 
        Console.WriteLine("Creating Directory"); 
        System.IO.Directory.CreateDirectory(TargetPath); 
       } 
      if (System.IO.File.Exists(ZipWithPath)) 
       { 
        Console.WriteLine("Deleting file"); 
        System.IO.File.Delete(ZipWithPath); 
       } 
      using (ZipFile zip = new ZipFile()) 
       { 
        Console.WriteLine("Zipping up Directories"); 
        zip.AddDirectory(SourcePath); // recurses subdirectories 
        Console.WriteLine("Saving Directories {0}",ZipName); 
        zip.Save(ZipWithPath); 
        Console.WriteLine("Finishing Up"); 
       } 

      } 
     } 
    } 
+0

你的存儲和NW吞吐量對於\\ winntdom來說如何?您是否考慮過在本地複製文件,在本地進行壓縮並複製回來? – tgolisch

+1

這是一個開源項目,所以你可以自己調試它。如果你不想再使用另一個圖書館,那麼有很多。 –

+0

對我而言,這只是一個預期的結果。壓縮比較昂貴,通過UNC複製也是如此。如果它不掛,那麼我會感到驚訝。 –

回答

6

在進一步的谷歌搜索後,我發現了一個提示緩衝區大小增加的參考。我做到了,並且它在工作。

   zip.BufferSize = 1000000; 
       zip.CodecBufferSize = 1000000;