Search code examples
c#.netout-of-memorygzipstream

System.OutofMemoryException throw while doing GZipStream Compression


I am working in win forms. Getting errors while doing following operation. It shows me System.OutOfMemoryException error when i try to run the operation around 2-3 times continuously. Seems .NET is not able to free the resouces used in operation. The file i am using for operation is quite big, around more than 500 MB.

My sample code is as below. Please help me how to resolve the error.

try
{
   using (FileStream target = new FileStream(strCompressedFileName, FileMode.Create, FileAccess.Write))
   using (GZipStream alg = new GZipStream(target, CompressionMode.Compress))
   {
       byte[] data = File.ReadAllBytes(strFileToBeCompressed);
       alg.Write(data, 0, data.Length);
       alg.Flush();
       data = null;
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

Solution

  • A very rough example could be

    // destFile - FileStream for destinationFile 
    // srcFile - FileStream of sourceFile
    using (GZipStream gz = new GZipStream(destFile, CompressionMode.Compress))
    {
         byte[] src = new byte[1024];
         int count = sourceFile.Read(src, 0, 1024);
         while (count != 0)
         {
             gz.Write(src, 0, count );
             count = sourceFile.Read(src, 0, 1024);
         }
    }
    // flush, close, dispose ..
    

    So basically I changed your ReadAllBytes to read only chunks of 1024 bytes.