• .NET ViewState对于画面的速度影响


    最近开发一个.NET网站,发现有一个画面的交互特别缓慢,查了很多原因都没查到

    最后终于知道,是因为画面的ViewState用的过多,其中有一个ViewState保存的数据相对而言比较大,导致了画面的运行缓慢

    于是我再次仔细的了解了ViewState的用途,终于发现网上有很多牛人想到了将VIEWSTATE转换为文件保存在服务器上

    以下这段代码可以放在页面中,或者页面的父类中:
    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);
    }
     
    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);
    }
     
    下面这段可以放在Global.asax中,也可以根本不管:



    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();
            });
        }
    }
    这可以确保绝对稳定可靠地工作。以后请放心使用ViewState,把交互式页面提高水平才是最重要的,不要纠缠在“ViewState太大”上。实际上,由于页面设计不够酷,交互变化看上去不够丰富,ViewState实在是太小太小了。
  • 相关阅读:
    Linux多线程Pthread学习小结
    TCP三次握手/四次挥手
    内存管理内幕
    Delphi 中分发设计时包
    一个小的算法问题解决
    写了一个验证数字范围的正则表达式
    用 XML 文件持久化和恢复图片信息
    string.Empty 和 "" 并不总是可以互换的
    博客园用的 FreeTextBox 有 bug
    乱花渐欲迷人眼。。。
  • 原文地址:https://www.cnblogs.com/zhuxiaohui/p/3326001.html
Copyright © 2020-2023  润新知