壓縮傳輸,資料來源源不斷,助資料遠行高飛 – compress dataset with .net 1.1

來源:互聯網
上載者:User
好久沒來這裡更新了!糊亂講點啥吧!

       .net的最強勢就是使得資料在Internet上自由傳輸。
和遠端資料庫打交道,很多.net的項目都用到了WebService,WebService除了可以傳輸一些基本的類型:int、Byte、string等等,還可以傳輸那些可以XML序列化的對象,比如DataSet!
Dataset定義如下:1[Visual Basic]
2<Serializable>
3Public Class DataSet
4   Inherits MarshalByValueComponent
5   Implements IListSource, ISupportInitialize, ISerializable

當然你也可以定義自己的實體,只要它可以XML序列化都可以在Internet上傳輸。通過一段時間用下來,發現通過WebService傳輸Dataset,或自己定義的實體,如果Client使用者很多,往往會使IIS佔用大量記憶體,而且速度也很慢。這時,我們潛意識中會想到壓縮,既然問題出來了,為什麼不壓縮呢?壓縮在中國可是有悠久的曆史了,由於頻寬太窄,所以下載的檔案都是經過壓縮的。

一般的思路就是壓縮成二進位。Google一下,發現黎波兄的文章。
  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!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.