ASP.NET服务器端视图状态
-
20-08-2019 - |
解决方案
在这种情况下,我愿意把存储采用了独特的密钥在会话对象和领带的关键页面。所有这些都可以被抽象成在页面类的属性。
public string PersistanceKey
{
get {
if(ViewState["PersistanceKey"] == null)
ViewState["PersistanceKey"] = "Object" + Guid.NewGuid().ToString();
return (string)ViewState["PersistanceKey"];
}
}
public PersistanceObject Persistance
{
get {
if(Session[this.PersistanceKey] == null)
Session[this.PersistanceKey] = new PersistanceObject();
return (PersistanceObject)Session[this.PersistanceKey];
}
在不同的会话密钥将允许在每个页面的基础不同的对象。或者,而不是使用Session对象,你可以考虑使用应用程序缓存(Cache对象)来自动删除过时的条目出来的内存,但是这有它自己的警告。
应该指出的是,乔尔对他的内存使用情况的答案警告是完全准确。这可能不是对于低存储器,高使用率,或者大持久性对象场景个好主意。
其他提示
我要寻找一种方法来持续的对象,而无需将其序列化。
小心那。这将会对内存使用你的网站产生巨大的影响,并且内存的使用往往是最大的障碍的可扩展性。
号码指定给每个窗口的用户可能会打开。追加这个数字的会话密钥。你也应该在一些地方保存页面(查询字符串或隐藏输入)的数量,以便能够检索适当的会话变量。
不隶属于 StackOverflow