2010-08-13 86 views
4

在asp.net中,主要数据存储是应用程序,会话,我们也有对象缓存。 我已经使用常识提示/提示(例如,永远不要把用户的具体数据放在应用程序中,从不将非托管资源放在会话中等等),但老实说,我从来没有遇到任何建议和例子,何时使用MSDN中的内容或者来自像Haack和Gu这样的知名人物,他们将三者结合在一起(例如,Google第一次将MSDN应用作为全局缓存进行讨论,如果是这种情况,对象缓存是什么?ASP.net应用程序会话缓存最佳实践和模式

另外,很少讨论的是场景中的比较,例如我知道它容易不必要地加载内存使用过度使用会话,但如果您使用对象缓存作为替代存储相同数据会发生什么?

编辑:This是的st迄今为止发现的信息:http://msdn.microsoft.com/en-us/library/ff647787.aspx

回答

2

使用会话存储用户特定的信息,因为框架自动将每个会话存储与特定用户相关联。

使用对象高速缓存可以缓存一次并在整个应用程序或一组用户中重复使用的信息。如果将用户特定的数据存储在对象高速缓存中,则必须创建一些机制来关联高速缓存条目。这不仅需要代表你做额外的工作,而且你可能会这样做,这会增加恶意用户以某种方式做类似于会话欺骗的可能性。

我不知道你什么时候需要使用Application对象。如果我没有弄错,Application对象比其他任何东西都更像是经典ASP的遗迹。

另一种可以同样重要的缓存形式是通过HttpContext.Items集合的每个请求缓存。这允许您在请求的整个生命周期中缓存数据,并且在单个请求期间(例如来自页面上的不同用户控制)请求相同的数据时非常有用。有关此方法的更多信息,请参阅HttpContext.Items - a Per-Request Cache Store

0

我会建议创建一个包装类,至少对于会话,如果这些会在整个代码中使用。这样,您可以注入一个类的实例来完成实际的工作,并使用模拟版本进行单元测试。我为一个广泛使用会话的大型项目做了这个工作,结果很好。

您可以将其与外观模式相结合 - 包装将提供您需要的特定方法,而不是暴露常规界面。作为一个例子,会话接受对象并返回对象,但它不是强类型的。包装器可以有强类型的添加和获取方法。