是否可以使用Parallel.Foreach
或其他方式优化此代码?
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 和 SharpZipLibZipOutputStream
不支持位置更改或搜索。
从多个线程写入 zip 流会导致错误。将结果流累积到 ConcurrentStack 也是不可能的,因为应用程序可以处理 1000 多个文档,并且应该即时压缩流并将流保存到云中。
有没有办法解决这个问题?