日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 之 提高WebService性能大数据量网络传输处理

發布時間:2025/3/17 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 之 提高WebService性能大数据量网络传输处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、直接返回DataSet對象

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

  優點:代碼精減、易于處理,小數據量處理較快;

  缺點:大數據量的傳遞處理慢,消耗網絡資源;

  建議:當應用系統在內網、專網(局域網)的應用時,或外網(廣域網)且數據量在KB級時的應用時,采用此種模式。

2、返回DataSet對象用Binary序列化后的字節數組?

  特點:字節數組流的處理模式;

  優點:易于處理,可以中文內容起到加密作用;

  缺點:大數據量的傳遞處理慢,較消耗網絡資源;

  建議:當系統需要進行較大數據交換時采用。

3、返回DataSetSurrogate對象用Binary序列化后的字節數組?

  特點:微軟提供的開源組件;

  優點:易于處理,可以中文內容起到加密作用;

  缺點:大數據量的傳遞處理慢,較消耗網絡資源;

  建議:當系統需要傳輸中文數據或需要加密時采用此種方式

4、返回DataSetSurrogate對象用Binary序列化并Zip壓縮后的字節數組

  特點:對字節流數組進行壓縮后傳遞;

  優點:當數據量大時,性能提高效果明顯,壓縮比例大;

  缺點:相比第三方組件,壓縮比例還有待提高;

  建議:當系統需要進行大數據量網絡數據傳遞時,建議采用此種可靠、高效、免費的方法。?

  測試用例:SqlServer2000數據庫,數據量大小40000行,字段數10個,結果如下:

?

?

使用方法

?

用時(秒)

?

數據量(Byte)

?

大小

百分比(%)

?

直接返回DataSet

?

12.625

?

19629414

?

100%

?

返回二進制序列化后DataSet

?

9.712

?

12049645

?

61.38%

?

返回轉化DataSetSurrogate的DataSet 并且二進制序列化后

?

7.943

?

5138990

?

26.18%

?

返回轉化DataSetSurrogate的DataSet 并且二進制序列化后使用zip壓縮

?

7.619

?

978033

?

4.98%

?

using System; using System.Data; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.ComponentModel;using System.IO; using System.IO.Compression; using System.Data.SqlClient; using System.Runtime.Serialization.Formatters.Binary;namespace DataSetWebService {/// <summary>/// Service1 的摘要說明/// </summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][ToolboxItem(false)]public class DataSetService : System.Web.Services.WebService{[WebMethod(Description="直接返回DataSet對象")]public DataSet GetDataSet(){//http://www.dzbsoft.com XT_TEXTstring sql = "select * from XT_TEXT";SqlConnection conn = new SqlConnection("Server=60.28.25.58;DataBase=s168593;user id=s168593;password=h0y+FeC*;");conn.Open();SqlDataAdapter dataAd = new SqlDataAdapter(sql, conn);DataSet DS = new DataSet("XT_TEXT");dataAd.Fill(DS);conn.Close();return DS;}[WebMethod(Description = "返回DataSet對象用Binary序列化后的字節數組")]public byte[] GetDataSetBytes(){DataSet DS = GetDataSet();BinaryFormatter ser = new BinaryFormatter();MemoryStream ms = new MemoryStream();ser.Serialize(ms, DS);byte[] buffer = ms.ToArray();return buffer;}[WebMethod(Description = "返回DataSetSurrogate對象用Binary序列化后的字節數組")]public byte[] GetDataSetSurrogateBytes(){DataSet DS = GetDataSet();DataSetSurrogate dss = new DataSetSurrogate(DS);BinaryFormatter ser = new BinaryFormatter();MemoryStream ms = new MemoryStream();ser.Serialize(ms, dss);byte[] buffer = ms.ToArray();return buffer;}[WebMethod(Description = "返回DataSetSurrogate對象用Binary序列化并ZIP壓縮后的字節數組")]public byte[] GetDataSetSurrogateZipBytes(){DataSet DS = GetDataSet();DataSetSurrogate dss = new DataSetSurrogate(DS);BinaryFormatter ser = new BinaryFormatter();MemoryStream ms = new MemoryStream();ser.Serialize(ms, dss);byte[] buffer = ms.ToArray();byte[] Zipbuffer = Compress(buffer);return Zipbuffer;}public byte[] Compress(byte[] data){MemoryStream ms = new MemoryStream();Stream zipStream = null;zipStream = new GZipStream(ms, CompressionMode.Compress, true);zipStream.Write(data, 0, data.Length);zipStream.Close();ms.Position = 0;byte[] compressed_data = new byte[ms.Length];ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));return compressed_data;}} }客戶端調用:C/Susing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;using System.IO; using System.IO.Compression; using System.Data.SqlClient; using System.Runtime.Serialization.Formatters.Binary;namespace Test {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void BindDataSet(DataSet DS){this.dataGridView1.DataSource = DS.Tables[0];}private void button1_Click(object sender, EventArgs e){com.dzbsoft.www.DataSetService ds = new Test.com.dzbsoft.www.DataSetService();DateTime dtBegin = DateTime.Now;DataSet DS = ds.GetDataSet();this.label1.Text = string.Format("耗時:{0}", DateTime.Now - dtBegin);BindDataSet(DS);}private void button2_Click(object sender, EventArgs e){com.dzbsoft.www.DataSetService ds = new Test.com.dzbsoft.www.DataSetService();DateTime dtBegin = DateTime.Now;byte[] buffer = ds.GetDataSetBytes();DataSet DS = ds.GetDataSet();BinaryFormatter ser = new BinaryFormatter();DataSet dataset = ser.Deserialize(new MemoryStream(buffer)) as DataSet;this.label2.Text = string.Format("耗時:{0}", DateTime.Now - dtBegin + " " + buffer.Length.ToString());BindDataSet(DS);}private void button3_Click(object sender, EventArgs e){com.dzbsoft.www.DataSetService ds = new Test.com.dzbsoft.www.DataSetService();DateTime dtBegin = DateTime.Now;byte[] buffer = ds.GetDataSetSurrogateBytes();BinaryFormatter ser = new BinaryFormatter();DataSet DS = ds.GetDataSet();DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;DataSet dataset = dss.ConvertToDataSet();this.label3.Text = string.Format("耗時:{0}", DateTime.Now - dtBegin + " " + buffer.Length.ToString());BindDataSet(DS);}private void button4_Click(object sender, EventArgs e){com.dzbsoft.www.DataSetService ds = new Test.com.dzbsoft.www.DataSetService();DateTime dtBegin = DateTime.Now;byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes();byte[] buffer = UnZipClass.Decompress(zipBuffer);BinaryFormatter ser = new BinaryFormatter();DataSet DS = ds.GetDataSet();DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;DataSet dataset = dss.ConvertToDataSet();this.label4.Text = string.Format("耗時:{0}", DateTime.Now - dtBegin + " " + zipBuffer.Length.ToString());BindDataSet(DS);}} }UnZipClass.csusing System; using System.Collections.Generic; using System.Text; using System.IO; using System.IO.Compression;namespace Test {public static class UnZipClass{/// <summary>/// Decompresses the specified data./// </summary>/// <param name="data">The data.</param>/// <returns></returns>public static byte[] Decompress(byte[] data){try{MemoryStream ms = new MemoryStream(data);Stream zipStream = null;zipStream = new GZipStream(ms, CompressionMode.Decompress);byte[] dc_data = null;dc_data = EtractBytesFormStream(zipStream, data.Length);return dc_data;}catch{return null;}}public static byte[] EtractBytesFormStream(Stream zipStream, int dataBlock){try{byte[] data = null;int totalBytesRead = 0;while (true){Array.Resize(ref data, totalBytesRead + dataBlock + 1);int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock);if (bytesRead == 0){break;}totalBytesRead += bytesRead;}Array.Resize(ref data, totalBytesRead);return data;}catch{return null;}}} }

?

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的C# 之 提高WebService性能大数据量网络传输处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区视频观看 | 亚洲精品视频三区 | 国产精品久久久久一区二区 | 午夜在线观看影院 | 朝桐光在线播放 | 岛国av动作片 | 538国产精品一区二区 | 中文字幕人成乱码熟女香港 | 激情国产| 777片理伦片在线观看 | 好男人影视www | 国产女主播在线观看 | 国产精品精品久久久 | 蜜桃av一区二区 | 日韩最新中文字幕 | 国产又黄视频 | 91久久人澡人人添人人爽欧美 | 精品影视一区二区 | 欧美成人精品一区 | 中文字幕日本视频 | a级黄片毛片 | 啪啪免费网 | 一本一道波多野结衣av黑人 | 五月天激情影院 | 午夜精品久久久久久久四虎美女版 | 国产精品区二区三区日本 | 亚洲精品一级片 | 国产三级久久久久 | 象人高潮调教丨vk | 国产午夜大地久久 | 午夜影院性 | 麻豆网站免费观看 | 亚洲在线天堂 | 亚洲最大视频网站 | 99综合视频 | 肉丝超薄少妇一区二区三区 | 99视频| 欧美综合第一页 | 国产a∨精品一区二区三区仙踪林 | 在线看v片 | 99久久久精品免费观看国产 | av全黄| 午夜亚洲福利 | 久久久久网站 | 80日本xxxxxxxxx96 亚洲国产精品视频在线 | 欧美乱码视频 | 国产精品一区三区 | 成人亚洲网站 | 综合天堂av久久久久久久 | 日本人jizz | 草久久av| 国产原创剧情av | 美女131爽爽爽做爰视频 | 亚洲网址 | 日本美女视频网站 | 欧洲成人在线观看 | 久久神马影院 | 中国老熟妇自拍hd发布 | 少妇的被肉日常np | 亚洲一卡二卡在线观看 | 黄视频在线 | 713电影免费播放国语 | 亚欧美在线观看 | 一眉道姑| 精品人妻一区二区三区久久嗨 | 午夜免费av | 国产乱码精品一区二区三区忘忧草 | 麻豆传媒在线观看视频 | 欧美9999| 91麻豆蜜桃一区二区三区 | 殴美黄色大片 | 超碰97成人 | 僵尸艳谈| 涩涩视频在线播放 | 欧美视频一区 | 绝顶高潮合集videos | 免费人成在线观看 | 午夜网站在线观看 | 中文字幕久久综合 | 日本黄色一区二区 | 国产xxx在线观看 | 日韩另类视频 | 动漫女被黄漫免费视频 | 男人的天堂avav | 麻豆视| 国产精品久久久久久亚洲色 | 中文字幕一区二区三区四区视频 | 中文在线www | 麻豆综合| 精品国产成人亚洲午夜福利 | 岛国午夜视频 | 91精品国产综合久久久久久 | 高跟丝袜av | 女性裸体下面张开 | 国产精品18久久久久久久久 | 精品丰满少妇一区二区三区 | 综合成人在线 | 青青草99 | 国产精品网页 |