• ViewState压缩


    /// <summary>
    ///CompressViewState 的摘要说明
    /// </summary>
    public class CompressViewState:System.Web.UI.Page
    {
    	public CompressViewState()
    	{
    		//
    		//TODO: 在此处添加构造函数逻辑
    		//
    	}
    
    
        protected override object LoadPageStateFromPersistenceMedium()
        {
            PageStatePersister pageStatePersister = this.PageStatePersister;
            pageStatePersister.Load();
            string vState = pageStatePersister.ViewState.ToString();
            byte[] pBytes = System.Convert.FromBase64String(vState);
            pBytes = Decompress(pBytes);
            LosFormatter mFormat = new LosFormatter();
            object ViewState = mFormat.Deserialize(System.Convert.ToBase64String(pBytes));
            return new Pair(pageStatePersister.ControlState, ViewState);
    
    
    
    
        }
    
    
        protected override void SavePageStateToPersistenceMedium(object pViewState)
        {
            Pair pair;
            PageStatePersister pageStatePersister = this.PageStatePersister;
            object ViewState;
            if (pViewState is Pair)
            {
                pair = ((Pair)pViewState);
                pageStatePersister.ControlState = pair.First;
                ViewState = pair.Second;
    
            }
            else
            {
                ViewState = pViewState;
            }
    
    
            LosFormatter mFormat = new LosFormatter();
            StringWriter mWriter = new StringWriter();
            mFormat.Serialize(mWriter, ViewState);
            String mViewStateStr = mWriter.ToString();
            byte[] pBytes = System.Convert.FromBase64String(mViewStateStr);
            pBytes = Compress(pBytes);
            String vStateStr = System.Convert.ToBase64String(pBytes);
            pageStatePersister.ViewState = vStateStr;
            pageStatePersister.Save();
        }
    
        /// <summary>
        /// This Methhod takes the byte stream as parameter 
        /// and return a compressed bytestream.
        /// For compression it uses GZipStream
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        private byte[] Compress(byte[] b)
        {
            MemoryStream ms = new MemoryStream();
            GZipStream zs = new GZipStream(ms, CompressionMode.Compress, true);
            zs.Write(b, 0, b.Length);
            zs.Close();
            return ms.ToArray();
        }
    
    
        /// <summary>
        /// This methhod takes the compressed byte stream as parameter
        /// and return a decompressed bytestream.
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        private byte[] Decompress(byte[] b)
        {
            MemoryStream ms = new MemoryStream();
            GZipStream zs = new GZipStream(new MemoryStream(b), CompressionMode.Decompress, true);
            byte[] buffer = new byte[4096];
            int size;
            while (true)
            {
                size = zs.Read(buffer, 0, buffer.Length);
                if (size > 0)
                    ms.Write(buffer, 0, size);
                else break;
            }
            zs.Close();
            return ms.ToArray();
        }
    }
    

      http://www.codeproject.com/Articles/101888/ViewState-Various-ways-to-reduce-performance-overh

  • 相关阅读:
    32位系统最大只能支持4GB内存之由来
    无线传感器网络中的节点定位技术
    Python 面向对象编程(一)
    Eclipse+PyDev+Django+Mysql搭建Python web开发环境
    Python中的函数(二)
    关于raw_input()和sys.stdin.readline()的区别
    Python中的函数(三)
    将Sublime Text 2搭建成一个好用的IDE
    Windows Phone 7 Tips (1)
    Expression Blend 知识锦分享
  • 原文地址:https://www.cnblogs.com/halo/p/3248271.html
Copyright © 2020-2023  润新知