不同的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 example
, Page Output caching
:它有两种types,页面输出caching和页面片段caching。
页面输出cachingcaching整个网页,只有当页面内容相当静态时才适用。 如果部分页面正在更改,则可以将静态部分包装为用户控件,并使用页面片段高速caching来caching用户控件。
And one last comment on
Application
和HttpRuntime.cache
And one last comment on
:
Application
不是一个caching,它是一个全局命名值集合。 如果你添加一个对象到Application
,它将一直保持到一个appdomain的回收。
- 应用程序variables是Web应用程序的所有用户中的共享variables
- 应用程序variables的行为类似于静态variables,它们是静态variables的替代,因为静态variables在Web应用程序中是无状态的
- 只有共享值应该被保留在应用程序variables中,只要它们不被使用,它们应该被明确地删除。
Cache
:通过caching频繁请求的对象和数据在Application
或Cache
类中,可以在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应该是依赖于HttpContext
或HttpRuntime
任何东西,因为这将把你绑定到特定的主机。 Web API应用程序应该独立于主机构build。