4

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

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

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

4

2 回答 2

11

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

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

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

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

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

于 2011-12-31T08:43:57.360 回答
0

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

Cache 和 MemoryCache 类之间的主要区别在于 MemoryCache 类已被更改,以使其可供非 ASP.NET 应用程序的 .NET Framework 应用程序使用。例如,MemoryCache 类不依赖于 System.Web 程序集。另一个区别是您可以创建 MemoryCache 类的多个实例,以便在同一个应用程序和同一个 AppDomain 实例中使用。

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

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

我建议阅读this , thisthis thread 以获得更好的理解和关于这个主题的一些很棒的想法。

要回答您的问题:

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

只要您在进行网站开发,旧的网络缓存应该能够满足您的所有用例。网站中可能有非常专业的用例,您需要更新的MemoryCache,但我目前想不出任何用例。

于 2018-01-19T23:29:31.030 回答