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 以上のドキュメントを処理でき、その場でストリームを圧縮してクラウドに保存する必要があるためです。
これを解決する方法はありますか?