• [转]将ViewState持久化保持在服务器端[转]


    #region 将ViewState持久化保持在服务器端
            //如果你有一个非常酷的页面,页面上很多东西自动地响应用户操作而展现丰富的变化,你的ViewState是很有可能达到200K的。
            //这里是将ViewState持久化保持在服务器端的代码,这样ViewState不占用网络带宽,因此其存取只是服务器的磁盘读取时间。
            //并且它很小,可以说是磁盘随便转一圈就能同时读取好多ViewState,因此可以说“不占时间”。
            //为了再“不占磁盘时间”,还使用了缓存。
            //以下代码放在页面、或者页面的父类中。
            /// <summary>
            /// 1
            /// </summary>
            /// <returns></returns>
            protected override object LoadPageStateFromPersistenceMedium()
            {
                var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
                var stateObject = Cache[viewStateID];
                if (stateObject != null)
                    return stateObject;

                var fn = this.Server.MapPath("~/App_Data/ViewState/" + viewStateID);
                var stateStr = File.ReadAllText(fn);
                return new ObjectStateFormatter().Deserialize(stateStr);
            }
            /// <summary>
            /// 2
            /// </summary>
            /// <param name="state"></param>
            protected override void SavePageStateToPersistenceMedium(object state)
            {
                var viewStateID = (DateTime.Now.Ticks + this.GetHashCode()).ToString(); //产生离散的id号码
                Cache.Insert(viewStateID, state);
                var value = new ObjectStateFormatter().Serialize(state);

                var fn = this.Server.MapPath("~/App_Data/ViewState/" + viewStateID);
                ThreadPool.QueueUserWorkItem(obj => File.WriteAllText(fn, value));
                base.SavePageStateToPersistenceMedium(viewStateID);
            }

            /// <summary>
            /// 这段放到Global.asax中,也可以不管
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void Application_Start(object sender, EventArgs e)
            {
                var dir = new DirectoryInfo(this.Server.MapPath("~/App_Data/ViewState/"));
                if (!dir.Exists)
                    dir.Create();
                else
                {
                    var nt = DateTime.Now.AddHours(-1);
                    dir.GetFiles().ForEach(f =>
                    {
                        if (f.CreationTime < nt)
                            f.Delete();
                    });
                }
            }
            #endregion

  • 相关阅读:
    k64 datasheet学习笔记26--Oscillator (OSC)
    k64 datasheet学习笔记22---Direct Memory Access Controller (eDMA)
    k64 datasheet学习笔记21--Direct Memory Access Multiplexer (DMAMUX)
    System.getProperty()获取系统的配置信息
    Zoomit的用法总结
    .bat文件调用java类的main方法
    电脑快捷键总结
    验证java引用的小例子
    java随机数
    java调用删除文件的方法删除文件,却删除不干净
  • 原文地址:https://www.cnblogs.com/heige/p/3121666.html
Copyright © 2020-2023  润新知