怎样提高WebService的性能
生活随笔
收集整理的這篇文章主要介紹了
怎样提高WebService的性能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
服務器端WebService程序using?System.Runtime.Serialization.Formatters.Binary;
using?System.IO;
using?System.IO.Compression;
using?System.Data.SqlClient;
………
public?class?Service1?:?System.Web.Services.WebService
{
????[WebMethod(Description?=?"直接返回?DataSet?對象。")]
????public?DataSet?GetNorthwindDataSet()
????{
????????string?sql?=?"SELECT?*?FROM?DB";
????????SqlConnection?conn?=?new?SqlConnection("Server=60.28.25.58;DataBase=s168593;user?id=s168593;password=*****;");
????????conn.Open();
????????SqlDataAdapter?dataadapter?=?new?SqlDataAdapter(sql,?conn);
????????DataSet?ds?=?new?DataSet();
????????dataadapter.Fill(ds,?"DB");
????????conn.Close();
????????return?ds;
????}
????
????[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;
????}
????
????[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;
????}
????
????[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,?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;
????????}
????????catch
????????{
????????????return?null;
????????}
????}
}
客戶端WebService程序
private?void?button1_Click(object?sender,?EventArgs?e){
????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);
}
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);
}
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);
}
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?+?"條記錄";
}
客戶端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;
????????}
????}
}
轉載于:https://www.cnblogs.com/iChina/archive/2011/11/15/2250367.html
總結
以上是生活随笔為你收集整理的怎样提高WebService的性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 莫高窟壁画是谁画的啊?
- 下一篇: 【转】SQL函数:字符串中提取数字,英文