压缩传输

本文介绍了一种使用.NET平台压缩传输DataSet的方法,通过WebService进行高效的数据交换。利用DataSetSurrogate类提高序列化效率,并采用CompressionHelper进行数据压缩,显著降低传输时间和资源消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2006年9月29日

压缩传输,数据源源不断,助数据远行高飞 - compress dataset with .net 1.1

好久没来这里更新了!糊乱讲点啥吧!

       .net的最强势就是使得数据在Internet上自由传输。

和远程数据库打交道,很多.net的项目都用到了WebService,WebService除了可以传输一些基本的类型:int、Byte、string等等,还可以传输那些可以XML序列化的对象,比如DataSet!

Dataset定义如下:

1

[Visual Basic]

2

<Serializable>

3

Public Class DataSet

4

   Inherits MarshalByValueComponent

5

   Implements IListSource, ISupportInitialize, ISerializable

当然你也可以定义自己的实体,只要它可以XML序列化都可以在Internet上传输。通过一段 时间用下来,发现通过WebService传输Dataset,或自己定义的实体,如果Client用户很多,往往会使IIS占用大量内存,而且速度也很 慢。这时,我们潜意识中会想到压缩,既然问题出来了,为什么不压缩呢?压缩在中国可是有悠久的历史了,由于带宽太窄,所以下载的文件都是经过压缩的。

一般的思路就是压缩成二进制。谷歌一下,发现黎波兄的文章。

 

http://www.cnblogs.com/upto/archive/2006/04/10/compresswebservice.html

把他的代码编译成了DLL,抽象出两个方法

 1

 2

    ''' 压缩Dataset

 3

   Public Shared Function Compress(ByVal data As DataSet) As Byte()

 4

 5

        Dim dss As New DataSetSurrogate(data)

 6

        Dim ser As New BinaryFormatter

 7

        Dim ms As New MemoryStream

 8

        ser.Serialize(ms, dss)

 9

        Dim buffer As Byte() = ms.ToArray()

10

11

        Dim zipBuffer As Byte() = New CompressionHelper(CompressionLevel.BestSpeed).CompressToBytes(buffer)

12

13

        Return zipBuffer

14

15

    End Function

16

17

    '解压缩Dataset

18

    Public Shared Function DeCompress(ByVal data As Byte()) As DataSet

19

20

        Dim buffer As Byte() = New CompressionHelper(CompressionLevel.BestSpeed).DecompressToBytes(data)

21

        Dim ser As New BinaryFormatter

22

        Dim ms As New MemoryStream(buffer)

23

24

        'Return ser.Deserialize(ms)

25

        Return CType(ser.Deserialize(ms), DataSetSurrogate).ConvertToDataSet

26

27

    End Function

Demo 结构如下,请把CompresDataWithDotNet1.1WebService工程搞成Webservice

Demo是从Wevservice中取100000条数据,未压缩数据可压缩数据的比较!

压缩效果图:

大功告成!!

我原先对黎波兄的DataSetSurrogate这个类感到奇怪,直接Dataset序列化不就完了吗?为什么还要用DataSetSurrogate这个中间"层"?

我试了一下把DataSetSurrogate去掉,直接DataSet序列化,结果是发现速度超慢,把时间都用在序列化上面了!

源码下载

后继:

压缩并不局限于Dataset,把程序稍微改一改,可以压缩你定义的序列化实体!

你也可以加入一些数据加密解密的算法!

最近在学习.net 2.0,发现.net 2.0自带一些类,实现压缩,比如GZipStream压缩类,压缩比更高,数据更快,我会继续<<compress DataSet with .net 2.0>>,还有数据加密RSACryptoServiceProvider!

 

源文档 <http://cache.baidu.com/c?word=datasetsurrogate%2C%D1%B9%CB%F5&url=http%3A//mastercai%2Ecnblogs%2Ecom/archive&b=0&a=4&user=baidu>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值