.Net 4内存缓存类和用户会话

时间:2011-12-31 06:14:38

标签: asp.net-mvc c#-4.0 memorycache

.Net 4.0中的新类MemoryCache似乎就像asp.net缓存一样。我的问题是:

MemoryCache是​​否等同于在会话缓存中为用户存储对象/值,而不是在aspx页面后面的代码中存储。

存储在服务器上的MemoryCache中的值是否可以访问网页事件?

2 个答案:

答案 0 :(得分:11)

  

MemoryCache是​​否等同于在会话缓存中为用户存储对象/值

不,它不等同。 ASP.NET Session对象是按用户键/值存储,而MemoryCache是​​应用程序级键/值存储(值在所有用户之间共享)。

  

存储在服务器上的MemoryCache中的值是否可以   可以访问网页事件吗?

在ASP.NET MVC中,通常没有网页事件,但您可以在应用程序中的任何位置访问存储在MemoryCache中的值。

基本上,在ASP.NET应用程序中,新的MemoryCache对象只是旧HttpContext.Cache对象的包装器(它将值存储在旧的Cache对象中)。

答案 1 :(得分:0)

用户会话状态与Web世界相关,而较新的MemoryCache是一种新的实现,现在可以在其他类型的应用程序中概括缓存的可用性,例如控制台应用程序,winform应用程序等。MemoryCache存储在w.r.t.创建其实例的应用程序域,并且是应用于访问该应用程序的所有用户。引自this MSDN链接:

  

Cache和MemoryCache类之间的主要区别是   MemoryCache类已被更改为可供.NET使用   不是ASP.NET应用程序的框架应用程序。例如,   MemoryCache类与System.Web程序集没有依赖关系。   另一个区别是你可以创建多个实例   MemoryCache类用于相同的应用程序和相同的应用程序   AppDomain实例。

MemoryCache类完全出现在一个单独的程序集System.Runtime.Caching.dll中,可以引用

注意MemoryCache类和System.Web.Caching.Cache类是位于不同dll中的不同实现,没有相互依赖性。从概念上讲,它们的行为看起来非常相似,无论如何它们在一天结束时都是缓存。

我建议您阅读thisthisthis主题,以便更好地理解这些主题,并对此有一些很好的想法。

回答你的问题:

  • 存储应用程序范围但重量轻的任何内容 - 使用应用程序状态
  • 存储应用程序范围但资源密集型的任何内容 - 使用 Web缓存
  • 存储特定用户的任何内容(通常轻量级的东西,因为重量级的东西不会随着网站用户的增长而扩展) - 使用会话状态

只要您正在进行网站开发,旧的Web缓存应该能够满足您的所有用例。在一个weebsite中可能有非常专业的用例,你需要更新的MemoryCache,但我现在想不到。