大量のデータを解凍しようとしていますが、次のコードを使用しています。私はエラーを取得する次の繰り返しで、その後罰金と最初の反復が終了:「 「タイプの例外は、 『System.OutOfMemoryExceptionには』がmscorlib.dllで発生したが、ユーザーコードで処理されなかった」あなたはC#関数の呼び出し後のメモリ不足
private static void UnCompressP(byte[] buffToUnCompress, int index, AutoResetEvent eventToTrigger, ref MemoryStream[] memStream)
{
eventToTrigger.Set();
MemoryStream cmpStream = new MemoryStream(buffToUnCompress);
GZipStream unCompZip = new GZipStream(cmpStream, CompressionMode.Decompress, true);
byte[] unCompressedBuffer = new byte[buffToUnCompress.Length];
MemoryStream msToAssign = new MemoryStream();
int read = 0;
while (0 != (read = unCompZip.Read(unCompressedBuffer, 0, buffToUnCompress.Length)))
{
msToAssign.Write(unCompressedBuffer, 0, read);
msToAssign.Flush();
}
memStream[index] = msToAssign;
unCompZip.Close();
cmpStream.Close();
}
あまりにも多くのデータをメモリに一度に格納するように思えます。これを避け、代わりに特定の時点でメモリ内の小さな部分のみを保持できるようにするストリームでのみ動作する必要があります。 – Servy
さらに、ソリューションをx86の代わりにターゲットx64に切り替えることもできます。これにより、.NETプロセスのメモリ制限が約2GBになり、使用可能な値になります。 – CShark
私はx64と互換性のないdllファイルを持っています。別のオプションがあります。 –