2013-02-07 48 views
5

HttpContext类的CacheItems属性有什么区别?HttpContext的缓存和项目属性有什么区别?

从MSDN文档:

缓存
获取当前应用程序域的高速缓存对象。

物品
获取一个密钥/值集合可用于HTTP请求期间,组织和共享IHttpModule的接口和IHttpHandler接口之间传输数据。

我真的不明白该文档试图解释什么。

在处理ASP.NET Web应用程序时,我经常使用Items进行数据的每个请求缓存,以便多个用户控件最终不会从数据库中查找相同的数据。这在this article中描述。

今天,我遇到了Cache属性的用法,看起来像什么,按请求缓存。我试图了解其中的差异,但找不到比较这两者的好文件。所以我想知道...

HttpContext的缓存和项目属性有什么区别?请尝试详细说明的示例,为什么您会选择在不同的真实世界场景中使用一个。

回答

10

项目是每个请求,所以它只适用于那个给定的用户给定的HTTP请求。高速缓存存储在内存中持续一段时间,并且不依赖于特定用户。因此,跨多个请求可以跨多个用户共享缓存,但每个用户请求的项目数量不同。

这取决于你想要数据生存多久。我使用Items来存储EF中ObjectContext或DbContext等东西,我只希望为给定的请求共享这些东西。但是所有用户都会在很多请求中使用参考表数据,所以缓存会更好。

+0

是否有任何关于用于分区'Cache'数据的请求?我们有一个网络应用程序,它为许多不同的域提供请求,每个用户有一个域。看起来我所维护的代码依赖于不同的域来分隔每个用户的缓存数据。我的意思是用户特定的数据存储在缓存中,没有任何用户ID或密钥中的任何内容。这怎么可能工作?另外,在我链接的文章中,他们在'Items'键中使用了userID,这会让我觉得'Items'是在很多用户的请求中共享的。现在我比以前更困惑...... –

+0

缓存或会话,因为会话是用户特定的。您还可以通过将用户ID附加到缓存键来使用户特定的缓存...然后每个用户都可以拥有自己的缓存专用条目。在您提供的文章中,他们提供的方法提供了一种方法,您可以将HttpContext.Items中的数据共享到多个用户控件或自定义控件,但仅限于该用户的当前请求。然后,Items集合将在每个请求上生成,因此数据将在下一个请求中再次可用。 –

相关问题