zoukankan      html  css  js  c++  java
  • 怎样提高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, 0int.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;
            }
        }
    }
  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/iChina/p/2250367.html
Copyright © 2011-2022 走看看