我在下面的代碼中不斷收到一個令人討厭的OutOfMemory異常。C#OutOfMemoryException使用SharpZipLib創建ZipOutputStream
我在壓縮很多小文件(PDF,每個大約1.5mb)。
起初,我收到了25個壓縮文件的異常,這看起來不像是一個集體存檔。
設立的ZipEntry的大小,以110頁中的文件壓縮(我在Visual Studio中調試)
這裏是我的代碼以某種方式幫助,因爲我現在管理起牀,也許有什麼不妥的地方。
任何幫助將不勝感激。
感謝
public static MemoryStream Zip(Dictionary<string, byte[]> files)
{
var outputMemStream = new MemoryStream();
var zipStream = new ZipOutputStream(outputMemStream);
zipStream.SetLevel(9);
foreach (var file in files)
{
zipStream.PutNextEntry(new ZipEntry(file.Key.FmtValidFileName())
{
Size = file.Value.Length
});
zipStream.Write(file.Value, 0, file.Value.Length);
zipStream.Flush();
}
zipStream.Finish();
outputMemStream.Position = 0;
return outputMemStream;
}
實現'IDisposible'的每個類都需要放入'using'塊。如果您有支持它的Visual Studio版本,則可以打開靜態代碼分析,以便在您忘記正確執行時發出警告。 – nvoigt 2014-10-17 04:45:09
它並沒有幫助我害怕。 OutOfMemoryException發生在文件循環中。我無法將outputMemStream放入使用中,因爲我將它用作返回。 我試圖使用緩衝區而不是完全寫入文件,但它也沒有幫助,問題不在於我壓縮的每個文件的大小,而是所有文件的總大小。 – Etienne 2014-10-17 04:54:43
您應該創建一個小型的自包含示例。對於我們所知道的,'FmtValidFileName'可以由'throw new OutOfMemoryException();'組成。準備一個人們可以使用最佳實踐來複制和編譯自己的例子,並且這會幫助您更容易。 – nvoigt 2014-10-17 05:00:03