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