问题描述
//privatevoidexecuteFileCompression()//{//FileStreamsourceFile=File.OpenRead(this.backupPath+this.backupOriginalName);//FileStreamdestinationFile=File.Create(this.backupPath+this.backupCompressionName);//byte[]buffer=newbyte[sourceFile.Length];//sourceFile.Read(buffer,0,buffer.Length);//using(GZipStreamoutput=newGZipStream(destinationFile,CompressionMode.Compress))//{////Console.WriteLine("Compressing{0}to{1}.",sourceFile.Name,destinationFile.Name,false);//output.Write(buffer,0,buffer.Length);//}//sourceFile.Close();//destinationFile.Close();//}本人用GzipStream壓縮SQLServer的700MB的bak之備份文件,但發覺我內存有1G都報錯,OutOfMemory,聽有分段壓縮方式,請問問怎做???
解决方案
解决方案二:
GzipStream本身不支持分段压缩..可以先将700M的文件拆分为小文件...然后分别调用GzipStream压缩..
解决方案三:
0x1000为一段,压缩和解压,参考如下代码usingSystem.IO;usingSystem.IO.Compression;privatevoidbutton1_Click(objectsender,EventArgse){FileStreamvSourceFileStream=newFileStream(@"c:temptemp.bmp",FileMode.Open,FileAccess.Read,FileShare.Read);FileStreamvDestFileStream=newFileStream(@"c:temptemp.zip",FileMode.OpenOrCreate,FileAccess.Write);GZipStreamvGZipStream=newGZipStream(vDestFileStream,CompressionMode.Compress,true);byte[]vBuffer=newbyte[0x1000];intvReadLength=vSourceFileStream.Read(vBuffer,0,vBuffer.Length);while(vReadLength>0){vGZipStream.Write(vBuffer,0,vReadLength);vReadLength=vSourceFileStream.Read(vBuffer,0,vBuffer.Length);}vGZipStream.Close();vSourceFileStream.Close();vDestFileStream.Close();}privatevoidbutton2_Click(objectsender,EventArgse){FileStreamvSourceFileStream=newFileStream(@"c:temptemp.zip",FileMode.Open,FileAccess.Read,FileShare.Read);FileStreamvDestFileStream=newFileStream(@"c:temptemp2.bmp",FileMode.OpenOrCreate,FileAccess.Write);GZipStreamvGZipStream=newGZipStream(vSourceFileStream,CompressionMode.Decompress,true);byte[]vBuffer=newbyte[0x1000];intvReadLength=vGZipStream.Read(vBuffer,0,vBuffer.Length);while(vReadLength>0){vDestFileStream.Write(vBuffer,0,vReadLength);vReadLength=vGZipStream.Read(vBuffer,0,vBuffer.Length);}vGZipStream.Close();vSourceFileStream.Close();vDestFileStream.Close();}