不同ASP.NET缓存选项的优缺点是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

最近我问了一个关于在ASP.NET MVC WebAPI应用程序中缓存应用程序数据的问题,这引发了一个新问题。ASP.NET中可用的不同缓存方法有哪些优缺点?

我来了:

  • 内存缓存 http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx
  • 使用静态成员变量: private static Northwind.SuppliersDataTable suppliers = null;
  • 申请状态: HttpContext.Current.Application["key"] ="Value"
  • 数据缓存: HttpRuntime.Cache.Insert( /* key */ "key", /* value */ "value", /* dependencies */ null, /* absoluteExpiration */ Cache.NoAbsoluteExpiration, /* slidingExpiration */ Cache.NoSlidingExpiration, /* priority */ CacheItemPriority.NotRemovable, /* onRemoveCallback */ null);

我确信还有其他人,我知道他们都在技术上将数据存储在内存中......所以,不知道我应该使用什么ASP.NET MVC webapi?

提问于
用户回答回答于

每种缓存技术/方法都有自己的一套功能。这些功能在一个应用需求中可能看起来有缺点,但在其他应用需求中可能是有利的。

因此,总之,根据要求确定哪种缓存技术和哪些功能最适合您。

For example, Let us discuss some client side Caching techniques.

MSDN表示,我们也可以使用HiddenField在隐藏字段中仅存储少量频繁更改的数据,因为此数据在每次回发中都包含在服务器的往返中。

此功能的优点:通过使用客户端选项存储页面信息来减少服务器的工作负载。

不过,MSDN明确表示:这种方法对安全性的支持很少。

因此,一个人可能会也可能不会使用这个功能,因为安全考虑也是存在的。

Consider one more examplePage Output caching:它有2种类型,页面输出缓存和页面片段缓存。

页面输出缓存缓存整个网页,并且仅当该页面的内容相当静态时才适用。如果部分页面正在更改,则可以将静态部分包装为用户控件,并使用页面片段高速缓存来缓存用户控件。

And one last comment on Application vs HttpRuntime.cache

Application不是一个缓存,它是一个全局命名值集合。如果你添加一个对象,Application它将一直持续到一个appdomain的回收。

  • 应用程序变量是Web应用程序的所有用户中的共享变量
  • 应用程序变量的行为与静态变量类似,它们替代静态变量,因为静态变量在Web应用程序中是无状态的
  • 只有共享值应该保留在应用程序变量中,一旦它们不被使用,它们应该被明确地删除。

Cache:通过缓存频繁请求的对象和数据到Application或者Cache类中,可以在ASP.NET应用程序中获得显着的性能改进。虽然该Cache课程提供了更大的灵活性和控制能力,但它似乎只能提高Application缓存的整体吞吐量。开发一种测试方案非常困难,该方案可以Cache通过清除过程准确测量该类内部管理较少使用对象的潜在优势,而不是应用程序不提供此功能。开发者需要在这种情况下做出决定,并且应该基于项目的需求和便利以及它的使用模式。检查这个链接 为更多。

参考这篇MSDN文章,对Asp.net中的所有缓存技术进行全面的了解,并讨论每种技术的特点。

另外,这2个链接是一个很好的来源:

用户回答回答于

关于MemoryCachevs ASP.NET缓存:它们提供了非常类似的功能。在ASP.NET 4应用程序中,如果没有其他原因,我通常更喜欢ASP.NET缓存,然后是因为.NET 4中一个错误,而这在.NET 4.5中显然已修复。

静态字段适用于存储不需要过期策略的共享数据。

应用程序状态不仅仅是一个带有与传统ASP兼容的锁定语义的静态字典 - 我只能用它来与传统ASP代码向后兼容。

扫码关注云+社区