.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实在是太小太小了。

转载于:https://www.cnblogs.com/zhuxiaohui/p/3326001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值