を使用してかなり大きなZIP
ファイルを作成するときに発生するOutOfMemoryException
をデバッグしようとしています。System.IO.Packagingを使用して大きなZIPファイルを作成するときにOutOfMemoryExceptionが発生する
コードはオブジェクトの大きなリストを反復し、各オブジェクトに対して次のことを行います。
- オブジェクトデータを一時ファイルにシリアライズします。
- ファイルに対して
PackagePart
を作成しています。別のソースSystem.IO.Stream
から - コピー:
- ソースストリーム:
FileStream
- ターゲットストリーム:
PackagePart::GetStream()
=>MS.Internal.IO.Zip.ZipIOModeEnforcingStream
- ソースストリーム:
最後に、それはファイルを保存しPackage::Close()
を呼び出します。
私が抱えている問題は、特に大きなオブジェクトリストの場合、OutOfMemoryException
(x86プロセスのサイズは約1.2GBになっています)です。
オブジェクトデータをまとめることを考えていたので、1ループあたりの処理量はわずかです(上記の手順1〜3)。私は、n
のZIPファイルを一時ディレクトリに作成し、それらを1つのアーカイブに結合する方法を見つけることを考えています。
これはSystem.IO.Packaging
を使用して可能ですか?部品を組み合わせるために私は何を使用しますか?
これを修正するより良い方法がありますか?
新しいパッケージ – Ankur
@Ankurを作成するときに、繰り返しの間にFlushを呼び出してみてください。@Ankur - あなたはそれを釘付けにしましたが、そのトリックをしたようです。あなたのコメントを回答にアップグレードすると、私はそれを受け入れることを嬉しく思うでしょう。 – LeopardSkinPillBoxHat