ViewState持久化保持在服务器端
来源:互联网 发布:win7系统安装ubuntu 编辑:程序博客网 时间:2024/05/16 11:28
如果你有一个非常酷的页面,页面上很多东西自动地响应用户操作而展现丰富的变化,你的ViewState是很有可能达到200K的。
这里是我将ViewState持久化保持在服务器端的代码,这样ViewState不占用网络带宽,因此其存取只是服务器的磁盘读取时间。并且它很小,可以说是磁盘随便转一圈就能同时读取好多ViewState,因此可以说“不占时间”。为了再“不占磁盘时间”,我还使用了缓存。
一下这段代码可以放在页面中,或者页面的父类中:
{
var viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
var stateStr = (string)Cache[viewStateID];
if (stateStr == null)
{
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
stateStr = File.ReadAllText(fn);
}
return new ObjectStateFormatter().Deserialize(stateStr);
}
protected override void SavePageStateToPersistenceMedium(object state)
{
var value = new ObjectStateFormatter().Serialize(state);
var viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID); ThreadPool.QueueUserWorkItem(obj => File.WriteAllText(fn, value));
Cache.Insert(viewStateID, 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实在是太小太小了。
如果你使用了它有效提高了复杂交互页面的效率,可以说一下提高了多少?!如果你觉得没用,也可以说一下在什么情况下没用。
原文链接http://topic.csdn.net/u/20080530/22/ef0d36a4-6bd4-4eba-9743-b56f080b2161.html
- 将ViewState持久化保持在服务器端
- ViewState持久化保持在服务器端
- ViewState持久化保持在服务器端
- ViewState持久化保持在服务器端
- Server Side ViewState 在服务器端存贮ViewState (ASP.NET 2.0)
- Session保持持久化对象
- 去掉viewstate保持在页面中的一大串字符的方法
- 用VIEWSTATE /Profile/自己在服务器端实现个Cache
- 状态保持-ViewState
- ViewState 状态保持
- 服务器端保存viewstate
- 如何在HTTP客户端与服务器端之间保持状态
- ViewState 页面级状态保持
- Asp.Net之ViewState状态保持
- ASP ViewState对象,完成客户端状态保持
- cache:缓存在asp.net中如何管理?服务器端缓存?Session, Application, Cache objectscache ,客户端缓存?Cookies,ViewState (转)
- 如何在HTTP客户端与服务器端之间保持状态 ?总结笔记
- 怪哉,为什么我的ViewState变量值不能保持了?!
- 淘宝开放平台接口申请与调试小结
- jQuery Ajax 全解析
- 击败苹果的方法--让手机免费
- c#中什么情况下用(int)什么情况下用Convert.ToInt32
- 2011-3-17序言
- ViewState持久化保持在服务器端
- 3.顺序流水灯
- 在vs2008中检查MFC内存泄露
- flash学习笔记:桌面快捷方式
- delphi 中判断对象是否具备某一属性
- 多线程编程
- 如何在Mac上使用卡拉OK
- 关于QT与Flash互操作
- C语言中几种输出调试信息的方法