.Net : Unzipling Gz file : 内存不足,无法继续执行程序

.Net : Unzipping Gz file : Insufficient memory to continue the execution of the program

所以我一直在使用下面的方法来解压 .gz 文件并且效果非常好。

它使用 SharpZip。

现在我正在使用更大的文件,它似乎试图解压缩内存中的所有内容给我:内存不足,无法继续执行程序。

我应该阅读每一行而不是使用 ReadToEnd() 吗?

public static void DecompressGZip(String fileRoot, String destRoot)
        {
            using FileStream fileStram = new FileStream(fileRoot, FileMode.Open, FileAccess.Read);
            using GZipInputStream zipStream = new GZipInputStream(fileStram);
            using StreamReader sr = new StreamReader(zipStream);
            var data = sr.ReadToEnd();
            File.WriteAllText(destRoot, data);
        }

正如@alexei-levenkov 所建议的那样,CopyTo 将在不耗尽所有内存的情况下对副本进行分块。

奖励积分,使用异步版本以获得线程优势。

public static async Task DecompressGZipAsync(String fileRoot, String destRoot)
{
      using (Stream zipFileStream = File.OpenRead(fileRoot))
      using (Stream outputFileStream = File.Create(destRoot))
      using (Stream zipStream = new GZipInputStream(zipFileStream))
      {
            await zipStream.CopyToAsync(outputFileStream);
      }
}