Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net:解压缩Gz文件:内存不足,无法继续执行程序_C#_.net_Sharpziplib - Fatal编程技术网

C# .Net:解压缩Gz文件:内存不足,无法继续执行程序

C# .Net:解压缩Gz文件:内存不足,无法继续执行程序,c#,.net,sharpziplib,C#,.net,Sharpziplib,因此,我一直在使用下面的方法来解压缩.gz文件,而且效果非常好 它使用夏普拉链 现在我正在使用更大的文件,它似乎试图解压内存中的所有内容,这给了我:内存不足,无法继续执行程序 我应该阅读每一行而不是使用ReadToEnd() 正如@alexei levenkov所建议的,CopyTo将在不耗尽所有内存的情况下对副本进行分块 额外的好处是,使用异步版本进行线程优化 public static async Task DecompressGZipAsync(String fileRoot, Strin

因此,我一直在使用下面的方法来解压缩.gz文件,而且效果非常好

它使用夏普拉链

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

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


正如@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);
      }
}

正如@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);
      }
}

你为什么不干脆
.CopyTo
?读取整个文件以立即将其写回(特别是在可能从/转换为UTF8的情况下)听起来不是一个好主意……为什么不干脆
.CopyTo
?读取整个文件以立即将其写回(特别是可能从/转换为UTF8)听起来不是一个好主意。。。