タイトルだけでは何を求めているのかわかりませんが、多数のファイルを 1 つのファイルに圧縮し、再度解凍するアルゴリズムを作成しました。OutOfMemory 例外を回避するために、2 つの fileStream を使用して、最初に元のファイルからデータのセグメントを読み取り、次に他の fileStream を使用してこれらのセグメントを最終的なファイルに書き込みます。
以下にコードの抜粋を含めました。この場合、rStream と wStream はすでに適切に宣言されており、bufferSize は現在 16 mB です。fInfo は、読み取り元のファイルのファイル情報です。
明らかに、bufferSize が大きいほど、操作は速く完了します。操作の効率を最大化するために使用できる最大 bufferSize を知りたいですか?
int bytesRead = 0;
long toRead = fInfo.Length - curFileSize;
if (toRead > bufferSize) { toRead = bufferSize; }
byte[] fileSegment = new byte[toRead];
while (bytesRead < toRead)
{
bytesRead += rStream.Read(fileSegment, bytesRead, (int)toRead - bytesRead);
}
wStream.Seek(finalFileSize, SeekOrigin.Begin);
wStream.Write(fileSegment, 0, (int)toRead);