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

转载 2007年09月19日 15:30: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)
 

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

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

wcf传输Dataset大数据量(转)

http://www.th7.cn/Program/net/201309/148486.shtml   由于WCF不能传输DataTable(不能序列化),所以更多项目中都会使用DataSet作为...

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

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

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

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

大数据量跨系统人员信息同步比较高效方案

《大数据量跨系统人员信息同步比较高效方案》By landray LD 2011-09-01 背景: 1、  用户有近3w的用户信息在其他系统中需要同步到ad目录中去 2、  原系统没有提供修改时...
  • 9309143
  • 9309143
  • 2011年09月01日 12:02
  • 428

大数据量导出到Excel方法总结

最近项目中牵扯到大数据量导出到Excel。传统的jxl,poi等在后端生成excel的方法就不见得有多奏效。 1. JXL后端生成Excel代码(struts2 action方法代码): public...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数据量(16M)DataSet压缩方法比较
举报原因:
原因补充:

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