在我的AppStart.cshtml中,我从数据库中获取一些数据,进行计算,序列化/反序列化json字符串等,然后通过执行类似的操作将结果存储在一对AppState变量中以下内容:(C#)在AppState和Session中存储数据
AppState["myVar1"]="aString";
AppState["myVar2"]=anArray;
这些变量被频繁访问,是一个有点重来定义,所以我认为像这样的意义,而不是从头开始创建每一个需要它的时候的数据。即使不需要优化,它仍然对我有意义,因为它通过在需要数据的一堆地方没有相同的代码来提高可读性和明确的可维护性。
同样,我通过在用户登录时将数据放入会话中来按用户进行类似的操作,例如,
Session["userVar1"]="myString";
Session["userVar2"]=myAray;
不过,我刚才读的,我们永远不应该依赖于存储在这些数据仍然存在,当我们想读他们,因为他们存储在其中可能已经清除了服务器内存。 这是真的吗? 所以当我们想要访问其中的一个时,我们应该首先检查它是否为空?如果我们幸运的话,它不是空的,我们可以马上使用它,否则我们再次设置它。 这是应该如何使用存储在AppState和Session中的数据?如果是这样,如果它们为空,重新设置它们的好方法是什么?我想做一些创建一个函数来设置它们,如果它们为空?
好的,这看起来非常好。谢谢你的答案。我会尽快尝试。 – Clox
对不起,在这里新手问题,但我似乎无法弄清楚如何使用从类文件中的AppState等。仍然是新的这个..我得到:“名称”AppState“不存在于当前的上下文中”。我想我必须使用using-keyword来导入它,但我无法弄清楚如何去做。 – Clox
@Clox:取决于它存在的位置。请记住,这个类仍然与Web应用程序紧密耦合(凭借使用应用程序和会话),所以它应该在同一个项目中。我以前从未使用过'AppState',而且自从使用'Session'以来已经很长时间了。但正如我记得'Session'是'HttpContext'的一部分。所以,至少在很久以前,它会被System.Web.HttpContext.Current调用。会话“(http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx)在基本页面类(或基本控制器类)上,”会话“刚刚映射到该属性。 – David