关闭

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

标签: datasetwebservicefunctionbyte测试windows
733人阅读 评论(0) 收藏 举报
分类:
对于在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)
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:73337次
    • 积分:866
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:21篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论