是否有可能使用Parallel.Foreach
或其他來優化此代碼?並行壓縮C#
using (var zipStream = new ZipOutputStream(OpenWriteArchive()))
{
zipStream.CompressionLevel = CompressionLevel.Level9;
foreach (var document in docuemnts)
{
zipStream.PutNextEntry(GetZipEntryName(type));
using (var targetStream = new MemoryStream()) // document stream
{
DocumentHelper.SaveDocument(document.Value, targetStream, type);
targetStream.Position = 0; targetStream.CopyTo(zipStream);
}
GC.Collect();
};
}
問題是DotNetZip的和SharpZipLib的ZipOutputStream
不支持位置改變或尋求。
從多個線程寫入zip流會導致錯誤。將結果流積累到 也是不可能的ConcurrentStack beacuse應用程序可以與1000多個文檔一起使用,並且應該在運行時將流壓縮並保存到雲 中。
有什麼辦法解決這個問題嗎?
你*有*將所有文件壓縮到一個相同的檔案? –
是的,所有條目(文檔)應該放在同一個存檔中 –
如果ZipOutputStream * did *支持查找和位置更改,並且您設法實現了一個允許多個線程同時寫入的編組系統,它仍然會成爲你的瓶頸。 這樣的編組系統可能會導致比平行處理更多的開銷。 –