大数据量(16M)的DataSet压缩方法比较
发布时间:2020-12-17 02:55:23 所属栏目:安全 来源:网络整理
导读:(声明:魏滔序原创,转贴请注明出处。) 对于在WebService上必须(无法避免的情况下)要传输大量数据的DataSet时,对DataSet压缩是最好的方法,这样可以减少大量在网络传输过程中所占用的时间。 下面对我掌握的的DataSet压缩方法做一个测试,希望高人有斧正之处
(声明:魏滔序原创,转贴请注明出处。) 对于在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资源占用率的也让人无法接受。? ?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- chef – Knife bootstrap error – 成功验证但未获得此操作
- shell – 在将后续作业提交到PBS群集之前等待用户的所有作业
- Casbah Scala MongoDB驱动程序 – 嵌入式对象
- bash – 强制排序命令忽略文件夹名称
- 为什么在build.sbt工作时,sbt报告“没有找到:Build PlaySc
- angular中ui calendar的一些使用心得
- MySQL 系列连载之 XtraBackup 备份原理(1)
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- unix – Bash:>和>>运算符之间的区别?
- typescript – Angular2将父服务注入子级