c# – GZipStream有效性

c# – GZipStream有效性,第1张

概述我想将大的UInt16数组保存到文件中. positionCnt约为50000,stationCnt约为2500.直接保存,没有GZipStream,文件大约250MB,可以通过外部zip程序压缩到19MB.使用以下代码,该文件为507MB.我做错了什么? GZipStream cmp = new GZipStream(File.Open(cacheFileName, FileMode.Creat 我想将大的UInt16数组保存到文件中. positionCnt约为50000,stationCnt约为2500.直接保存,没有GZipStream,文件大约250MB,可以通过外部zip程序压缩到19MB.使用以下代码,该文件为507MB.我做错了什么?
GZipStream cmp = new GZipStream(file.Open(cachefilename,fileMode.Create),CompressionMode.Compress);BinaryWriter fs = new BinaryWriter(cmp);fs.Write((Int32)(positionCnt * stationCnt));for (int p = 0; p < positionCnt; p++){    for (int s = 0; s < stationCnt; s++)    {       fs.Write(BoundData[p,s]);    }}fs.Close();
解决方法 不确定您正在运行的.NET版本.在早期版本中,它使用的窗口大小与您编写的缓冲区大小相同.所以在你的情况下,它会尝试单独压缩每个整数.我认为他们在.NET 4.0中改变了这一点,但尚未验证.

无论如何,您要做的是在GZipStream之前创建一个缓冲流:

//使用64 KB缓冲区创建文件流
fileStream fs = new fileStream(filename,fileMode.Create,fileAccess.Write,fileShare.None,65536);
GZipStream cmp = new GZipStream(fs,CompressionMode.Compress);

GZipStream cmp = new GZipStream(file.Open(cachefilename,CompressionMode.Compress);BufferedStream buffStrm = new BufferedStream(cmp,65536);BinaryWriter fs = new BinaryWriter(buffStrm);

这样,GZipStream以64 KB的块的形式获取数据,并且可以更好地进行压缩.

大于64KB的缓冲区不会给你更好的压缩.

总结

以上是内存溢出为你收集整理的c# – GZipStream有效性全部内容,希望文章能够帮你解决c# – GZipStream有效性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1247135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存