青白江做网站的公司,app应用开发一般多少钱,微信怎么制作自己的公众号,android开发技术以前经常在群里听到朋友们说WebServices的性能特别的慢#xff0c;说的如何如何。说实话#xff0c;WebServices的确比调用本地数据要慢一些#xff0c;可是究竟有多慢#xff0c;真的如朋友们说的那么难以忍受吗#xff1f;我个人感觉#xff0c;多半原因在处理的方式上…以前经常在群里听到朋友们说WebServices的性能特别的慢说的如何如何。说实话WebServices的确比调用本地数据要慢一些可是究竟有多慢真的如朋友们说的那么难以忍受吗我个人感觉多半原因在处理的方式上。让我们亲自编写测试代码来证明这一切吧。文章由于是我一段时间的总结篇因此难免参杂个人主观因素说的不对的地方还请多多批评。以下我们主要从调用WebServices的方法的特点、应用场景、测试结果三个方面来进行下说明分析。 1. 直接返回DataSet对象 特点直接返回DataSet对象。 应用场景1.内网。2.外网且数据量在kb级别时。 2.返回DataSet对象用Binary序列化后的字节数组 特点字节数组流的处理模式。 应用场景较大数据交换。 3.返回DataSetSurrogate对象用Binary 序列化后的字节数组 特点使用微软提供的开源组件进行序列化依然是字节流的处理模式。详情请参考http://support.microsoft.com/kb/829740/zh-cn 应用场景 较大数据交换。 4.返回DataSetSurrogate对象用Binary 序列化并Zip压缩后的字节数组 特点使用微软提供的开源组件对字节流数组进行压缩后传递依然是字节流的处理模式。详情请参考http://support.microsoft.com/kb/829740/zh-cn 应用场景外网环境需要进行大数据量网络数据传递时建议采用此种方法。也是笔者强烈向大家推荐使用的一种方法。 WebServices的代码如下 WebServicesusing System;using System.Collections.Generic;using System.Web;using System.Web.Services;using System.Data;using Microsoft.Practices.EnterpriseLibrary.Common;using Microsoft.Practices.EnterpriseLibrary.Data;using System.IO;using System.IO.Compression;using System.Runtime.Serialization.Formatters.Binary;namespace WebService1{ /// summary /// Service1 的摘要说明 /// /summary [WebService(Namespace http://tempuri.org/)] [WebServiceBinding(ConformsTo WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class Service1 : System.Web.Services.WebService { [WebMethod(Description直接返回DataSet对象)] public DataSet GetDataSet() { string sql select * from Customers; Database db DatabaseFactory.CreateDatabase(); DataSet ds db.ExecuteDataSet(CommandType.Text,sql); return ds; } [WebMethod(Description 返回DataSet对象用Binary序列化后的字节数组)] public byte[] GetBytes() { DataSet ds GetDataSet(); BinaryFormatter bf new BinaryFormatter(); MemoryStream ms new MemoryStream(); bf.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 bf new BinaryFormatter(); MemoryStream ms new MemoryStream(); bf.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 bf new BinaryFormatter(); MemoryStream ms new MemoryStream(); bf.Serialize(ms, dss); byte[] buffer ms.ToArray(); byte[] Zipbuffer Compress(buffer); return Zipbuffer; } //压缩压缩后的字节数组 public byte[] Compress(byte[] data) { MemoryStream ms new MemoryStream(); Stream zipStream new GZipStream(ms, CompressionMode.Compress, true); zipStream.Write(data, 0, data.Length); zipStream.Close(); ms.Position 0; byte[] buffer new byte[ms.Length]; ms.Read(buffer, 0,int.Parse(ms.Length.ToString())); return buffer; } }} 客户端调用WebServices的代码如下 客户端调用WebServicesusing System;using System.Collections.Generic;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using WebServicesClient.localhost;using System.Data;using System.Runtime.Serialization.Formatters.Binary;using System.IO;using System.Diagnostics;namespace WebServicesClient{ public partial class _Default : System.Web.UI.Page { Service1 s new Service1(); protected void Page_Load(object sender, EventArgs e) { } //直接返回DataSet对象 protected void Button1_Click(object sender, EventArgs e) { Stopwatch sw new Stopwatch(); sw.Start(); DataSet ds s.GetDataSet(); GridView1.DataSource ds.Tables[0].DefaultView; GridView1.DataBind(); sw.Stop(); Label1.Text string.Format(耗时{0}毫秒, sw.ElapsedMilliseconds.ToString()); } //得到DataSet对象用Binary序列化后的字节数组 protected void Button2_Click(object sender, EventArgs e) { Stopwatch sw new Stopwatch(); sw.Start(); byte[] buffer s.GetBytes(); BinaryFormatter bf new BinaryFormatter(); DataSet ds bf.Deserialize(new MemoryStream(buffer)) as DataSet; GridView1.DataSource ds.Tables[0].DefaultView; GridView1.DataBind(); sw.Stop(); Label2.Text string.Format(耗时{1}毫秒数据大小{0}, buffer.Length.ToString(), sw.ElapsedMilliseconds.ToString()); } //得到DataSetSurrogate对象用Binary序列化后的字节数组 protected void Button3_Click(object sender, EventArgs e) { Stopwatch sw new Stopwatch(); sw.Start(); byte[] buffer s.GetDataSetSurrogateBytes(); BinaryFormatter bf new BinaryFormatter(); DataSetSurrogate dss bf.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate; DataSet ds dss.ConvertToDataSet(); GridView1.DataSource ds.Tables[0].DefaultView; GridView1.DataBind(); sw.Stop(); Label3.Text string.Format(耗时{1}毫秒数据大小{0}, buffer.Length.ToString(), sw.ElapsedMilliseconds.ToString()); } //得到DataSetSurrogate对象用Binary序列化并ZIP压缩后的字节数组 protected void Button4_Click(object sender, EventArgs e) { Stopwatch sw new Stopwatch(); sw.Start(); byte[] zipBuffer s.GetDataSetSurrogateZipBytes(); byte[] buffer UnZip.Decompress(zipBuffer); BinaryFormatter bf new BinaryFormatter(); DataSetSurrogate dss bf.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate; DataSet ds dss.ConvertToDataSet(); GridView1.DataSource ds.Tables[0].DefaultView; GridView1.DataBind(); sw.Stop(); Label4.Text string.Format(耗时{1}毫秒数据大小{0},zipBuffer.Length.ToString(),sw.ElapsedMilliseconds.ToString()); } }} 测试的结果按照先后顺序如下图所示 关于测试结果的特殊说明由于测试环境是在本地数据量也不是很大测试的结果离实际情况还不是很接近如果大家有条件的话可以测试一下同时希望把测试的结果提供给大家参考。 最后为了方便大家这里还提供了源码下载下载地址如下 /Files/wlb/WebServiceSummary.rar 关于源代码的特殊说明笔者这里的开发环境为VS2008中文版sp1SQLServer2008sp1。数据库为Northwind数据库。 转载于:https://www.cnblogs.com/aaa6818162/archive/2009/08/07/1541058.html