加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

分享WebService大数据量处理的优化性能进行网络传输

发布时间:2020-12-17 01:19:21 所属栏目:安全 来源:网络整理
导读:1 )直接返回 DataSet 对象 ? 特点:通常组件化的处理机制,不加任何修饰及处理; ? 优点:代码精减、易于处理,小数据量处理较快; ? 缺点:大数据量的传递处理慢,消耗网络资源; ? 建议:当应用系统在内网、专网(局域网)的应用时,或外网(广域网)且数

1)直接返回DataSet对象

?特点:通常组件化的处理机制,不加任何修饰及处理;

?优点:代码精减、易于处理,小数据量处理较快;

?缺点:大数据量的传递处理慢,消耗网络资源;

?建议:当应用系统在内网、专网(局域网)的应用时,或外网(广域网)且数据量在KB级时的应用时,采用此种模式。

?

示例如下

[WebMethod(Description = "直接返回 DataSet 对象。")]

???? public DataSet GetNorthwindDataSet()

???? {

???????? string 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 dataadapter = new SqlDataAdapter(sql,conn);

???????? DataSet ds = new DataSet();

???????? dataadapter.Fill(ds,"XT_TEXT");

???????? conn.Close();

???????? return ds;

????? }

?

?

客户程序调用方法:

?Code [http://www.xueit.com]private void button1_Click(object sender,EventArgs e)

{

?

??? //com.dzbsoft.www是上面Web Service发布后的命名空间

??? com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();

??? DateTime dtBegin = DateTime.Now;

??? DataSet dataSet = ds.GetNorthwindDataSet();

??? this.label1.Text = string.Format("耗时:{0}",DateTime.Now - dtBegin);

??? binddata(dataSet);

}

2 返回DataSet对象用Binary序列化后的字节数组

? 特点:字节数组流的处理模式;

? 优点:易于处理,可以中文内容起到加密作用;

? 缺点:大数据量的传递处理慢,较消耗网络资源;

[WebMethod(Description = "返回 DataSet 对象用 Binary 序列化后的字节数组。")]

??? public byte[] GetDataSetBytes()

??? {

??????? DataSet dataSet = GetNorthwindDataSet();

??????? BinaryFormatter ser = new BinaryFormatter();

??????? MemoryStream ms = new MemoryStream();

??????? ser.Serialize(ms,dataSet);

??????? byte[] buffer = ms.ToArray();

??????? return buffer;

}

?

客户程序调用方法:

?Code [http://www.xueit.com]private void button2_Click(object sender,EventArgs e)

{

??? com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();

??? DateTime dtBegin = DateTime.Now;

??? byte[] buffer = ds.GetDataSetBytes();

??? BinaryFormatter ser = new BinaryFormatter();

??? DataSet dataSet = ser.Deserialize(new MemoryStream(buffer)) as DataSet;

??? this.label2.Text = string.Format("耗时:{0}",DateTime.Now - dtBegin)?? "? "?? buffer.Length;

??? binddata(dataSet);

}

?

(3) 返回DataSetSurrogate对象用Binary序列化后的字节数组

? 特点:微软提供的开源组件;

?下载地址:

????????????????? http://support.microsoft.com/kb/829740/zh-cn

优点:易于处理,可以中文内容起到加密作用;

缺点:大数据量的传递处理慢,较消耗网络资源; 示例如下:

?

[WebMethod(Description = "返回 DataSetSurrogate 对象用 Binary 序列化后的字节数组。")]

???? public byte[] GetDataSetSurrogateBytes()

???? {

???????? DataSet dataSet = GetNorthwindDataSet();

???????? DataSetSurrogate dss = new DataSetSurrogate(dataSet);

???????? BinaryFormatter ser = new BinaryFormatter();

??????? ?MemoryStream ms = new MemoryStream();

???????? ser.Serialize(ms,dss);

???????? byte[] buffer = ms.ToArray();

???????? return buffer;

}

客户程序调用方法:

?Code [http://www.xueit.com] 1 private void button3_Click(object sender,EventArgs e)

{

???? com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();

???? DateTime dtBegin = DateTime.Now;

???? byte[] buffer = ds.GetDataSetSurrogateBytes();

???? BinaryFormatter ser = new BinaryFormatter();

???? DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;

???? DataSet dataSet = dss.ConvertToDataSet();

???? this.label3.Text = string.Format("耗时:{0}",DateTime.Now - dtBegin)?? "? "?? buffer.Length;

???? binddata(dataSet);

(4)返回DataSetSurrogate对象用Binary序列化并Zip压缩后的字节数组

?特点:对字节流数组进行压缩后传递;? 优点:当数据量大时,性能提高效果明显,压缩比例大;? 缺点:相比第三方组件,压缩比例还有待提高;? 建议:当系统需要进行大数据量网络数据传递时,建议采用此种可靠、高效、免费的方法

客户端UnZipClass程序

? public static class UnZipClass

{

???? 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 = ExtractBytesFromStream(zipStream,data.Length);

???????????? return dc_data;

???????? }

???????? catch

???????? {

???????????? return null;

???????? }

???? }

???? public static byte[] ExtractBytesFromStream(Stream zipStream,int dataBlock)

???? {

???????? byte[] data = null;

???????? int totalBytesRead = 0;

???????? try

???????? {

???????????? 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;

???????? }

???? }

}

以上为提高WebService性能大数据量网络传输处理的方法

[WebMethod(Description = "返回 DataSetSurrogate 对象用 Binary 序列化并 Zip 压缩后的字节数组。")]

??? public byte[] GetDataSetSurrogateZipBytes()

? ??{

??????? DataSet dataSet = GetNorthwindDataSet();

??????? DataSetSurrogate dss = new DataSetSurrogate(dataSet);

??????? 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)

??? {

??????? try

??????? {

??????????? MemoryStream ms = new MemoryStream();

??????????? Stream zipStream = null;

??????????? zipStream = new GZipStream(ms,CompressionMode.Compress,true);

??????????? zipStream.Write(data,data.Length);

??????????? zipStream.Close();

??????????? ms.Position = 0;

??????????? byte[] compressed_data = new byte[ms.Length];

??????????? ms.Read(compressed_data,int.Parse(ms.Length.ToString()));

??????????? return compressed_data;

??????? }

??????? catch

??????? {

??????????? return null;

??????? }

??? }

}

客户程序调用方法

private void button4_Click(object sender,EventArgs e)

{

???? com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();

???? DateTime dtBegin = DateTime.Now;

???? byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes();

???? byte[] buffer = UnZipClass.Decompress(zipBuffer);

???? BinaryFormatter ser = new BinaryFormatter();

???? DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;

????? DataSet dataSet = dss.ConvertToDataSet();

???? this.label4.Text = string.Format("耗时:{0}",DateTime.Now - dtBegin)?? "? "?? zipBuffer.Length;

???? binddata(dataSet);

}

?

?

? private void binddata(DataSet dataSet)

? {

??? this.dataGridView1.DataSource = dataSet.Tables[0];

??? this.label5.Text = "共计:"?? dataSet.Tables[0].Rows.Count?? "条记录";

? }

?

?

文章来自学IT网:http://www.xueit.com/asp.net/show-6902-3.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读