大数据量(16M)的DataSet压缩方法比较

转载 2006年05月21日 15:19:00
对于在WebService上必须(无法避免的情况下)要传输大量数据的DataSet时,对DataSet压缩是最好的方法,这样可以减少大量在网络传输过程中所占用的时间。 
下面对我掌握的的DataSet压缩方法做一个测试,希望高人有斧正之处,也希望需要的人有借鉴之处。 
注:经过压缩DataSet的WebService就缺少了通用性,请权衡使用之。 
 
测试源码(仅压缩部分)和结果如下: 
条件:压缩前的DataSet的大小为16891323字节(大约16.12M)。 
环境:.Net  Formatwork  1.1 
系统:  Windows  XP  SP1 
硬件:P4(2.4G)  +  256DDR 
 
方案1:DataSetSurrogate  +  BinaryFormatter 
       Public  Function  DataSetToByte(ByVal  DataSet  As  DataSet)  As  Byte() 
               Dim  DSS  As  New  DataSetSurrogate(DataSet) 
               Dim  MS  As  New  IO.MemoryStream 
               Dim  BF  As  New  BinaryFormatter 
               BF.Serialize(MS,  DSS) 
               Dim  ReVal()  As  Byte  =  MS.ToArray() 
               MS.Close() 
               DSS  =  Nothing 
               MS  =  Nothing 
               BF  =  Nothing 
               Return  ReVal 
       End  Function 
 
方案2:DataSetSurrogate  +  BinaryFormatter  +  SharpZipLib 
       Public  Function  DataSetToByte(ByVal  DataSet  As  DataSet)  As  Byte() 
               Dim  MS  As  New  IO.MemoryStream 
               Dim  ZOS  As  New  ZipOutputStream(MS) 
               ZOS.PutNextEntry(New  ZipEntry(DataSet.DataSetName)) 
               Dim  BF  As  New  BinaryFormatter 
               Dim  DSS  As  DataSetSurrogate  =  New  DataSetSurrogate(DataSet) 
               BF.Serialize(ZOS,  DSS) 
               ZOS.CloseEntry() 
               ZOS.Close() 
               Dim  ReVal  As  Byte()  =  MS.ToArray 
               MS.Close() 
               MS  =  Nothing 
               ZOS  =  Nothing 
               BF  =  Nothing 
               DSS  =  Nothing 
               Return  ReVal 
       End  Function 
 
方案3:zlib 
       Public  Function  DataSetToByte(ByVal  DataSet  As  DataSet)  As  Byte() 
               Dim  MS  As  New  System.IO.MemoryStream 
               DataSet.WriteXml(MS,  XmlWriteMode.WriteSchema) 
               Dim  ReVal()  As  Byte  =  MS.ToArray 
               MS.Close() 
               MS  =  Nothing 
               Dim  zlib  As  New  vbZLib.Compress 
               zlib.CompressByte(ReVal) 
               zlib  =  Nothing                 
               Return  ReVal 
       End  Function 
 
结果(压缩后): 
方案1:4420881字节(被压缩掉大约73.83%),耗时:23200ms 
方案2:  696881字节(被压缩掉大约95.87%),耗时:26621ms 
方案3:  422990字节(被压缩掉大约97.50%),耗时:    680ms 
 
看来,无论压缩率还是耗时都是方案3最优,但是使用了第三方组件。前两个方案对CPU资源占用率的也让人无法接受。 
作者:魏滔序  (zhongnian_wei&163.com)

文本压缩算法的对比和选择

本文主要粗略介绍数据压缩主要算法类别,以及最新针对Web文本资源的zStd和Brotli算法的设计要点。为Web业务应用如何使用它们替换传统gzip提供些参考。最后是一个文本有损压缩的尝试。...
  • HorkyChen
  • HorkyChen
  • 2017年07月15日 16:21
  • 3582

Java不同压缩算法的性能比较

本文转载自http://it.deepinmind.com/java/2015/01/04/performance-general-compression.html本文将会对常用的几个压缩算法的性能作...
  • caihongshijie6
  • caihongshijie6
  • 2015年01月04日 15:48
  • 2303

Java压缩算法性能比较

作者:Dreawer 链接:https://zhuanlan.zhihu.com/p/24379501 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 前...
  • being1943
  • being1943
  • 2016年12月15日 12:38
  • 2162

ACCESS数据库大数据量分页的几种方法比较及测试结果分析

  • 2010年07月25日 10:55
  • 88KB
  • 下载

MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适

MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LI...
  • Lxj12306
  • Lxj12306
  • 2017年12月04日 09:42
  • 314

wcf传输Dataset大数据量(转)

http://www.th7.cn/Program/net/201309/148486.shtml   由于WCF不能传输DataTable(不能序列化),所以更多项目中都会使用DataSet作为...
  • zunguitiancheng
  • zunguitiancheng
  • 2014年03月29日 12:13
  • 740

大数据量下MySQL插入方法的性能比较

不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入。插入的方式和数据库引擎都会对插入速度造成影响,这篇文章旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入方...
  • luyaran
  • luyaran
  • 2017年04月27日 17:38
  • 187

使用Poi读取大数据量excel的方法

  • 2015年02月09日 10:56
  • 10.46MB
  • 下载

大数据量_海量数据_处理方法总结

  • 2014年05月23日 14:32
  • 25KB
  • 下载

大数据量,海量数据 处理方法总结

  • 2011年12月22日 10:04
  • 36KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数据量(16M)的DataSet压缩方法比较
举报原因:
原因补充:

(最多只允许输入30个字)