1. 程式人生 > >WEB Service 下實現大資料量的傳輸

WEB Service 下實現大資料量的傳輸

)直接返回DataSet物件

 特點:通常元件化的處理機制,不加任何修飾及處理;

 優點:程式碼精減、易於處理,小資料量處理較快;

 缺點:大資料量的傳遞處理慢,消耗網路資源;

 建議:當應用系統在內網、專網(區域網)的應用時,或外網(廣域網)且資料量在KB級時的應用時,採用此種模式。

  示例如下

程式碼
  1. [WebMethod(Description ="直接返回 DataSet 物件。")]  
  2. public DataSet GetNorthwindDataSet()  
  3.    {  
  4. tring sql ="SELECT * FROM XT_TEXT";  
  5.       SqlConnection conn =new
     SqlConnection("Server=60.28.25.58;DataBase=s168593;user id=s168593;password=h0y+FeC*;");  
  6.        conn.Open();  
  7.         SqlDataAdapter dataadapter =new SqlDataAdapter(sql, conn);  
  8.       DataSet ds =new DataSet();  
  9.         dataadapter.Fill(ds, "XT_TEXT");  
  10.         conn.Close();  
  11. return ds;  
  12.     }  

 客戶程式呼叫方法

程式碼  
  1. privatevoid button1_Click(object sender, EventArgs e){  
  2. /com.dzbsoft.www是上面Web Service釋出後的名稱空間   
  3.  com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();  
  4.  DateTime dtBegin = DateTime.Now; DataSet dataSet = ds.GetNorthwindDataSet();  
  5.  this.label1.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin); binddata(dataSet);  

 (2) 返回DataSet物件用Binary序列化後的位元組陣列

  特點:位元組陣列流的處理模式;

   優點:易於處理,可以中文內容起到加密作用;    缺點:大資料量的傳遞處理慢,較消耗網路資源;  程式碼
  1. [WebMethod(Description ="返回 DataSet 物件用 Binary 序列化後的位元組陣列。")]  
  2.     publicbyte[] GetDataSetBytes()  
  3.     {  
  4.         DataSet dataSet = GetNorthwindDataSet();  
  5.         BinaryFormatter ser =new BinaryFormatter();  
  6.         MemoryStream ms =new MemoryStream();  
  7.         ser.Serialize(ms, dataSet);  
  8.         byte[] buffer = ms.ToArray();  
  9.         return buffer;  
  10. }  
 示例如下

客戶程式呼叫方法

程式碼
  1. privatevoid button2_Click(object sender, EventArgs e)  
  2. {  
  3.     com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();  
  4.     DateTime dtBegin = DateTime.Now;  
  5.     byte[] buffer = ds.GetDataSetBytes();  
  6.     BinaryFormatter ser =new BinaryFormatter();  
  7.     DataSet dataSet = ser.Deserialize(new MemoryStream(buffer)) as DataSet;  
  8.     this.label2.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin) +""+ buffer.Length;  
  9.     binddata(dataSet);  
  10. }  

(3) 返回DataSetSurrogate物件用Binary序列化後的位元組陣列

特點:微軟提供的開源元件; 優點:易於處理,可以中文內容起到加密作用; 缺點:大資料量的傳遞處理慢,較消耗網路資源; 示例如下 程式碼
  1. [WebMethod(Description ="返回 DataSetSurrogate 物件用 Binary 序列化後的位元組陣列。")]  
  2. publicbyte[] GetDataSetSurrogateBytes()  
  3.     {  
  4.         DataSet dataSet = GetNorthwindDataSet();  
  5.         DataSetSurrogate dss =new DataSetSurrogate(dataSet);  
  6.       BinaryFormatter ser =new BinaryFormatter();  
  7.        MemoryStream ms =new MemoryStream();  
  8.         ser.Serialize(ms, dss);  
  9. byte[] buffer = ms.ToArray();  
  10. eturn buffer;  
  11. }  
   客戶程式呼叫方法程式碼
  1. privatevoid button3_Click(object sender, EventArgs e)  
  2.     com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();  
  3.     DateTime dtBegin = DateTime.Now;  
  4. byte[] buffer = ds.GetDataSetSurrogateBytes();  
  5.    BinaryFormatter ser =new BinaryFormatter();  
  6.      DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;  
  7.      DataSet dataSet = dss.ConvertToDataSet();  
  8. this.label3.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin) +""+ buffer.Length;  
  9.     binddata(dataSet);  
  10. }  
 

(4)返回DataSetSurrogate物件用Binary序列化並Zip壓縮後的位元組陣列

 特點:對位元組流陣列進行壓縮後傳遞;  優點:當資料量大時,效能提高效果明顯,壓縮比例大;  缺點:相比第三方元件,壓縮比例還有待提高;  建議:當系統需要進行大資料量網路資料傳遞時,建議採用此種可靠、高效、免費的方法。 示例如下程式碼
  1. [WebMethod(Description ="返回 DataSetSurrogate 物件用 Binary 序列化並 Zip 壓縮後的位元組陣列。")]  
  2.     publicbyte[] GetDataSetSurrogateZipBytes()  
  3.     {  
  4.         DataSet dataSet = GetNorthwindDataSet();  
  5.         DataSetSurrogate dss =new DataSetSurrogate(dataSet);  
  6.         BinaryFormatter ser =new BinaryFormatter();  
  7.         MemoryStream ms =new MemoryStream();  
  8.         ser.Serialize(ms, dss);  
  9.         byte[] buffer = ms.ToArray();  
  10.         byte[] zipBuffer = Compress(buffer);  
  11.         return zipBuffer;  
  12.    }  
  13.     publicbyte[] Compress(byte[] data)  
  14.     {  
  15.         try
  16.         {  
  17.             MemoryStream ms =new MemoryStream();  
  18.             Stream zipStream =null;  
  19.             zipStream =new GZipStream(ms, CompressionMode.Compress, true);  
  20.             zipStream.Write(data, 0, data.Length);  
  21.             zipStream.Close();  
  22.             ms.Position =0;  
  23.             byte[] compressed_data =newbyte[ms.Length];  
  24.             ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));  
  25.             return compressed_data;  
  26.         }  
  27.         catch
  28.         {  
  29.             returnnull;  
  30.         }  
  31.     }  
  32. }  

  客戶程式呼叫方法

程式碼
  1. privatevoid button4_Click(object sender, EventArgs e)  
  2.   {  
  3.       com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();  
  4.       DateTime dtBegin = DateTime.Now;  
  5.   byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes();  
  6.   byte[] buffer = UnZipClass.Decompress(zipBuffer);  
  7.       BinaryFormatter ser =new BinaryFormatter();  
  8.       DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;  
  9.       DataSet dataSet = dss.ConvertToDataSet();  
  10.  this.label4.Text =string.Format("耗時:{0}", DateTime.Now - dtBegin) +""+ zipBuffer.Length;  
  11.      binddata(dataSet);  
  12.  }  
  13.    privatevoid binddata(DataSet dataSet)      {    
  1. this.dataGridView1.DataSource = dataSet.Tables[0];   
  1. this.label5.Text = "共計:" + dataSet.Tables[0].Rows.Count + "條記錄";    
程式碼
  1. 客戶端UnZipClass程式  
  2.  publicstaticclass UnZipClass  
  3. {  
  4. publicstaticbyte[] Decompress(byte[] data)  
  5.     {  
  6. try
  7.         {  
  8.             MemoryStream ms =new MemoryStream(data);  
  9.             Stream zipStream =null;  
  10.             zipStream =new GZipStream(ms, CompressionMode.Decompress);  
  11. byte[] dc_data =null;  
  12.             dc_data = ExtractBytesFromStream(zipStream, data.Length);  
  13. return dc_data;  
  14.         }  
  15. catch
  16.         {  
  17. returnnull;  
  18.         }  
  19.     }  
  20. 相關推薦

    WEB Service 實現料量傳輸

    )直接返回DataSet物件  特點:通常元件化的處理機制,不加任何修飾及處理;  優點:程式碼精減、易於處理,小資料量處理較快;  缺點:大資料量的傳遞處理慢,消耗網路資源;  建議:當應用系統在內網、專網(區域網)的應用時,或外網(廣域網)且資料量在KB級時的

    exp/expdp傳輸表空間和rman convert實現料量快速遷移

    將Oracle資料庫中某個使用者遷移到另外一個庫上,遷移的資料量大小約 120GB 。如果採用 expdp 匯出的話時間會很長,再加上匯出的 DMP 檔案拷貝和 impdp 匯入資料的時間,不能滿足要求。  這裡採用 RMAN 的CONVERT 功能和 exp/expdp

    Elasticsearch 使用scroll滾動技術實現料量搜尋

    如果一次性要查出來比如10萬條資料,那麼效能會很差,此時一般會採取用scroll滾動查詢,一批一批的查,直到所有資料都查詢完為止。 scroll搜尋會在第一次搜尋的時候,儲存一個當時的檢視快照,之後

    關於webservice料量傳輸時的壓縮和解壓縮

    當訪問WebSerivice時,如果資料量很大,傳輸資料時就會很慢。為了提高速度,我們就會想到對資料進行壓縮。首先我們來分析一下。         當在webserice中傳輸資料時,一般都採用Dataset進行資料傳輸。執行的過程就是先把Dataset轉化為xml進行傳輸

    webservice用於料量傳輸的處理

    1.    直接返回DataSet物件 特點:通常元件化的處理機制,不加任何修飾及             處理; 優點:程式碼精減、易於處理,小資料量處理較快; 缺點:大資料量的傳遞處理慢,消耗網路資源; 建議:當應用系統在內網、專網(區域網)的應用          

    基於Apache POI匯出(百萬級)料量Excel的實現

    POI匯出大資料量excel (注:專案原始碼及後續更新請點選) 1、ExcelUtils類: package Utils; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObje

    JDK8 switch使用字串比if else 效率高,親測料量資料

    for (TemplateFormVO templateFormVO:templateFormVOS){ formid=String.valueOf(templateFormVO.getFormId()); formId=templateFormVO.getFormI

    mysql料量優化

    1 優化sql和索引2 增加快取如:redis3 主從複製或主主複製,讀寫分離4 利用mysql自帶分割槽表5 先做垂直拆分,將一個大系統分為多個小系統,也就是分散式6 水平切分,要選擇一個合理的sharding key,為了有好的查詢效率,表結構也要改動,做一定的冗餘,應用也要改,sql中儘量帶shardi

    料量高併發同步

     對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題, 但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。    為了更好的理解併

    料量情況查詢效能低,耗時長的一種問題以及解決思路

    背景交代: 1   mongodb 有500萬條資料                  2  經過過濾 還有20多萬條資料 要得到上述20w條資料,一次查詢得到20多萬條,很可能會產生效能問題,於

    料量的集合過濾—Bloom Filter

    演算法背景如果想判斷一個元素是不是在一個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。連結串列、樹、散列表(又叫雜湊表,Hash table)等等資料結構都是這種思路,儲存位置要麼是磁碟,要麼是記憶體。很多時候要麼是以時間換空間,要麼是以空間換時間。在響應時

    料量高併發同步的講解(高併發的瓶頸-需要處理的內容)

    對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題, 但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。    為了更好的理解併發和同步,我們需要先

    料量的SQL Server資料庫自身優化

    原文: http://www.d1net.com/bigdata/news/284983.html 1.1:增加次資料檔案          從SQL SERVER 2005開始,資料庫不預設生成NDF資料檔案,一般情況下有一個主資料檔案(MDF)就夠了,但是有些大型的資

    通過索引,極大提高MySQL料量的查詢效率

    我在這裡測試了兩個表的左連線查詢,SQL語句是:select a.blog_id,a.blog_title,a.blog_thumb,a.blog_click,a.blog_addtime,a.blog_show,b.blog_category_name from `thin

    Integer和int的比較,料量情況造成頻繁gc的原因分析

    很多基礎的知識,覺得沒用,所以沒有在意。當實際用到的時候,出現了不同於預想的結果,才會認真分析。 這是shell排序的程式碼 public long sort(Integer[] datas) { long start = System.currentT

    【Itext】解決Itext5併發料量輸出PDF發生記憶體溢位outofmemery異常

    關鍵字 itext5 outofmemery 記憶體溢位 大資料 高併發 多執行緒 pdf 匯出 報表 itext 併發大資料量高併發的時候,Itext5會發生記憶體溢位,outofmemery異常,經過大規模的記憶體檢查,發現Itext在生成表格的時候,使用了很多的Hash

    Sybase 料量(100W條)分頁 jdbc實現目前要求無排序

    首次分頁大概為10秒左右。以後翻頁基本上是瞬間完成。要求是無排序情況下。 分析:sybase不提供分頁方法。top函式還不能放在子查詢語句中。使用hibernate分頁前幾頁和後幾頁沒問題,如果資料量大翻到30000頁時就記憶體溢位了。而且效率慢。 使用儲存過程分

    基於料量的快取查詢實現方案

           業務、應用系統最常用的就是基於資料的查詢,這不同於巨集觀意義上的系統各個層面優化(應用端、服務端、DB端等等),基於資料的查詢更多時候需要考慮資料的規模、使用者的習慣、資料的變化性等因素

    Java用POI實現讀取料量Excel

    java程式碼使用poi的API解決在讀取大資料量的Excel資料時候記憶體溢位的問題:首先我需要宣告下面的工具類是在老袁部落格(https://laoyuan.me/posts/java-read-big-excel-with-poi.html)基礎上做了稍微

    spring Batch實現資料庫料量讀寫

    1. data-source-context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" x