不同的ASP.NETcaching选项的优点/缺点

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

我来了:

  • 内存caching

    http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

  • 使用静态成员variables:

    private static Northwind.SuppliersDataTable suppliers = null; 
  • 申请状态:

      HttpContext.Current.Application["key"] ="Value" 
  • 数据caching:

     HttpRuntime.Cache.Insert( /* key */ "key", /* value */ "value", /* dependencies */ null, /* absoluteExpiration */ Cache.NoAbsoluteExpiration, /* slidingExpiration */ Cache.NoSlidingExpiration, /* priority */ CacheItemPriority.NotRemovable, /* onRemoveCallback */ null); 

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

我以前的问题: caching内存中的应用程序数据:MVC Web API

每个caching技术/方法都有自己的一套function。 这些特征在一个应用要求中可能看起来是不利的,但在其他应用要求中可能是有利的。

因此,总之,根据您的要求决定哪种caching技术和哪些function最适合您。

For example, Let us discuss some client side Caching techniques

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

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

但是,MSDN明确表示:这种方法对安全性的支持很less。

因此,总是可以或不可以使用这个特性,因为安全考虑也是存在的。

Consider one more examplePage Output caching :它有两种types,页面输出caching和页面片段caching。

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

And one last comment on ApplicationHttpRuntime.cache And one last comment on

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

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

Cache :通过caching频繁请求的对象和数据在ApplicationCache类中,可以在ASP.NET应用程序中获得显着的性能改进。 虽然Cache类肯定提供了更多的灵活性和控制,但它看起来只是在caching的Application类上增加吞吐量方面提供了一个边际优势。 开发一个testingscheme是非常困难的,它可以通过清除过程准确地测量Cache类的内置pipe理较less使用对象的潜在优点,而不是应用程序不提供此function。 开发者需要在这种情况下做出决定,并且应该根据项目的需求和方便程度及其使用模式。 检查此链接了解更多。

参考这篇MSDN文章 ,对每种技术的特点进行讨论,对Asp.net中的所有caching技术进行完整的说明。

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

关于MemoryCache vs ASP.NET Cache:他们提供了非常相似的function。 在ASP.NET 4应用程序中,我通常更喜欢ASP.NETcaching,如果没有其他原因,那么由于.NET 4中的一个错误 ,这在.NET 4.5中显然是固定的。

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

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

使用Web API时,首选caching应该始终是在HTTP响应中设置caching标头。 HttpResponseMessage.CacheControlHeader

你最后的select应该是依赖于HttpContextHttpRuntime任何东西,因为这将把你绑定到特定的主机。 Web API应用程序应该独立于主机构build。