大数据量(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)
 

相关文章推荐

当web应用中面临大数据量同时并发量比较大的情况下性能是一个尤为重要的问题,面对性能优化我们应从何做起,在哪些方面做优化呢?

数据结构设计方面:针对业务逻辑需求建立合适的数据结构。 中间介的调优以及网络环境部署:中间介以及网络环境也是以重要因素。 数据库方面:1.使用索引或者联合索引,但是索引并不是越多越好,过多的索引导致C...

大并发大数据量请求的处理方法

大并发大数据量请求一般会分为几种情况: 1.大量的用户同时对系统的不同功能页面进行查找,更新操作 2.大量的用户同时对系统的同一个页面,同一个表的大数据量进行查询操作 3.大量的用户...

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

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

Oracle数据库中大数据量查询优化问题--分区表的操作方法

Oracle数据库中大数据量查询优化问题--分区表的操作方法Oracle数据库中分区表的操作方法  摘要:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍...
  • rise51
  • rise51
  • 2011-03-27 20:33
  • 1692

Oracle数据库中大数据量查询优化问题 -- 分区表的操作方法

Oracle数据库中分区表的操作方法    摘要:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。     在大型的企业应用或...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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