• 怎样提高WebService的性能


    服务器端WebService程序: 

    C#代码  收藏代码
      1. using System.Runtime.Serialization.Formatters.Binary;  
      2. using System.IO;  
      3. using System.IO.Compression;  
      4. using System.Data.SqlClient;  
      5. ………  
      6. public class Service1 : System.Web.Services.WebService  
      7. {  
      8.   
      9.     [WebMethod(Description = "直接返回 DataSet 对象。")]  
      10.     public DataSet GetNorthwindDataSet()  
      11.     {  
      12.         string sql = "SELECT * FROM XT_TEXT";  
      13.         SqlConnection conn = new SqlConnection("Server=60.28.25.58;DataBase=s168593;user id=s168593;password=h0y+FeC*;");  
      14.         conn.Open();  
      15.         SqlDataAdapter dataadapter = new SqlDataAdapter(sql, conn);  
      16.         DataSet ds = new DataSet();  
      17.         dataadapter.Fill(ds, "XT_TEXT");  
      18.         conn.Close();  
      19.         return ds;  
      20. }  
      21.   
      22. [WebMethod(Description = "返回 DataSet 对象用 Binary 序列化后的字节数组。")]  
      23.     public byte[] GetDataSetBytes()  
      24.     {  
      25.         DataSet dataSet = GetNorthwindDataSet();  
      26.         BinaryFormatter ser = new BinaryFormatter();  
      27.         MemoryStream ms = new MemoryStream();  
      28.         ser.Serialize(ms, dataSet);  
      29.         byte[] buffer = ms.ToArray();  
      30.         return buffer;  
      31. }  
      32.   
      33.     [WebMethod(Description = "返回 DataSetSurrogate 对象用 Binary 序列化后的字节数组。")]  
      34.     public byte[] GetDataSetSurrogateBytes()  
      35.     {  
      36.         DataSet dataSet = GetNorthwindDataSet();  
      37.         DataSetSurrogate dss = new DataSetSurrogate(dataSet);  
      38.         BinaryFormatter ser = new BinaryFormatter();  
      39.         MemoryStream ms = new MemoryStream();  
      40.         ser.Serialize(ms, dss);  
      41.         byte[] buffer = ms.ToArray();  
      42.         return buffer;  
      43. }  
      44.   
      45.     [WebMethod(Description = "返回 DataSetSurrogate 对象用 Binary 序列化并 Zip 压缩后的字节数组。")]  
      46.     public byte[] GetDataSetSurrogateZipBytes()  
      47.     {  
      48.         DataSet dataSet = GetNorthwindDataSet();  
      49.         DataSetSurrogate dss = new DataSetSurrogate(dataSet);  
      50.         BinaryFormatter ser = new BinaryFormatter();  
      51.         MemoryStream ms = new MemoryStream();  
      52.         ser.Serialize(ms, dss);  
      53.         byte[] buffer = ms.ToArray();  
      54.         byte[] zipBuffer = Compress(buffer);  
      55.         return zipBuffer;  
      56. }  
      57.   
      58.     public byte[] Compress(byte[] data)  
      59.     {  
      60.         try  
      61.         {  
      62.             MemoryStream ms = new MemoryStream();  
      63.             Stream zipStream = null;  
      64.             zipStream = new GZipStream(ms, CompressionMode.Compress, true);  
      65.             zipStream.Write(data, 0, data.Length);  
      66.             zipStream.Close();  
      67.             ms.Position = 0;  
      68.             byte[] compressed_data = new byte[ms.Length];  
      69.             ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));  
      70.             return compressed_data;  
      71.         }  
      72.         catch  
      73.         {  
      74.             return null;  
      75.         }  
      76.     }  
      77. }  
      78.   
      79.   
      80. 客户端WebService程序  
      81. [code ="C#"]  
      82.   
      83. private void button1_Click(object sender, EventArgs e)  
      84. {  
      85.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
      86.     DateTime dtBegin = DateTime.Now;  
      87.     DataSet dataSet = ds.GetNorthwindDataSet();  
      88.     this.label1.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin);  
      89.     binddata(dataSet);  
      90. }  
      91. private void button2_Click(object sender, EventArgs e)  
      92. {  
      93.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
      94.     DateTime dtBegin = DateTime.Now;  
      95.     byte[] buffer = ds.GetDataSetBytes();  
      96.     BinaryFormatter ser = new BinaryFormatter();  
      97.     DataSet dataSet = ser.Deserialize(new MemoryStream(buffer)) as DataSet;  
      98.     this.label2.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin) + "  " + buffer.Length;  
      99.     binddata(dataSet);  
      100. }  
      101. private void button3_Click(object sender, EventArgs e)  
      102. {  
      103.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
      104.     DateTime dtBegin = DateTime.Now;  
      105.     byte[] buffer = ds.GetDataSetSurrogateBytes();  
      106.     BinaryFormatter ser = new BinaryFormatter();  
      107.     DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;  
      108.     DataSet dataSet = dss.ConvertToDataSet();  
      109.     this.label3.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin) + "  " + buffer.Length;  
      110.     binddata(dataSet);  
      111. }  
      112. private void button4_Click(object sender, EventArgs e)  
      113. {  
      114.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
      115.     DateTime dtBegin = DateTime.Now;  
      116.     byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes();  
      117.     byte[] buffer = UnZipClass.Decompress(zipBuffer);  
      118.     BinaryFormatter ser = new BinaryFormatter();  
      119.     DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;  
      120.     DataSet dataSet = dss.ConvertToDataSet();  
      121.     this.label4.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin) + "  " + zipBuffer.Length;  
      122.     binddata(dataSet);  
      123. }  
      124. private void binddata(DataSet dataSet)  
      125. {  
      126.     this.dataGridView1.DataSource = dataSet.Tables[0];  
      127.     this.label5.Text = "共计:" + dataSet.Tables[0].Rows.Count + "条记录";  
      128. }  
      129.   
      130.   
      131.   
      132. 客户端UnZipClass程序  
      133. [code ="C#"]  
      134. public static class UnZipClass  
      135. {  
      136.     public static byte[] Decompress(byte[] data)  
      137.     {  
      138.         try  
      139.         {  
      140.             MemoryStream ms = new MemoryStream(data);  
      141.             Stream zipStream = null;  
      142.             zipStream = new GZipStream(ms, CompressionMode.Decompress);  
      143.             byte[] dc_data = null;  
      144.             dc_data = ExtractBytesFromStream(zipStream, data.Length);  
      145.             return dc_data;  
      146.         }  
      147.         catch  
      148.         {  
      149.             return null;  
      150.         }  
      151.     }  
      152.     public static byte[] ExtractBytesFromStream(Stream zipStream, int dataBlock)  
      153.     {  
      154.         byte[] data = null;  
      155.         int totalBytesRead = 0;  
      156.         try  
      157.         {  
      158.             while (true)  
      159.             {  
      160.                 Array.Resize(ref data, totalBytesRead + dataBlock + 1);  
      161.                 int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock);  
      162.                 if (bytesRead == 0)  
      163.                 {  
      164.                     break;  
      165.                 }  
      166.                 totalBytesRead += bytesRead;  
      167.             }  
      168.             Array.Resize(ref data, totalBytesRead);  
      169.             return data;  
      170.         }  
      171.         catch  
      172.         {  
      173.             return null;  
      174.         }  
      175.     }  
      176. }  
  • 相关阅读:
    软件工程
    python 浮点数四舍六入五成双
    python 比较内嵌字典的值
    python 之多继承顺序及supper()方法执行顺序
    python之装饰器进化
    Centos7 安装Postgres10
    hive常用操作
    MySQL中case when else end 用法
    python写入日志文件时日志内容重复写入
    python向config、ini文件读取写入
  • 原文地址:https://www.cnblogs.com/ranran/p/4271515.html
Copyright © 2020-2023  润新知