Pros/Cons of different ASP.NET Caching Options
我最近问了一个关于在ASP.NET MVC WebAPI应用程序中缓存应用程序数据的问题,这让我想到了一个新问题。ASP.NET中不同缓存方法的优缺点是什么?
我来了:
内存缓存
http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx
使用静态成员变量:
1private static Northwind.SuppliersDataTable suppliers = null;应用程序状态:
1HttpContext.Current.Application["key"] ="Value"数据缓存:
1
2
3
4
5
6
7
8HttpRuntime.Cache.Insert(
/* key */ "key",
/* value */ "value",
/* dependencies */ null,
/* absoluteExpiration */ Cache.NoAbsoluteExpiration,
/* slidingExpiration */ Cache.NoSlidingExpiration,
/* priority */ CacheItemPriority.NotRemovable,
/* onRemoveCallback */ null);
我确信还有其他的,而且我知道它们都在技术上将数据存储在内存中……所以我知道我应该为ASP.NET MVC WebAPI使用什么吗?
我以前的问题:在内存中缓存应用程序数据:MVC Web API
每个缓存技术/方法都有自己的一组特性。这些特性在一个应用程序需求中似乎是不利的,但在其他应用程序需求中可能是有利的。
因此,简而言之,取决于您的需求,决定哪种缓存技术和哪些特性最适合您。
msdn说,我们也可以使用
此功能的优点:通过使用客户端选项存储页面信息来减少服务器上的工作负载。
但是,msdn清楚地说:这种方法的安全支持非常少。
因此,可以使用或不使用此功能,因为这里也存在安全考虑。
页面输出缓存缓存整个网页,仅当该网页的内容相当静态时才适用。如果页面的某些部分发生更改,则可以将静态部分包装为用户控件,并使用页面片段缓存来缓存用户控件。
- 应用程序变量是Web应用程序所有用户之间的共享变量。
- 应用程序变量的行为类似于静态变量,它们可以代替静态变量,因为静态变量在Web应用程序中是无状态的。
- 应用程序变量中只应持久化共享值,一旦不使用这些值,就应显式删除它们。
有关ASP.NET中所有缓存技术的完整详细说明,请参阅此msdn文章,并对每种技术的特性进行讨论。
此外,这两个链接也是一个很好的来源,可以从以下内容开始:
- http://weblogs.asp.net/pjohnson/httpruntime-cache-vs-httpcontext-current-cache
- http://devshop.wordpress.com/2008/04/10/how-to-choose-from-viewstate-sessionstate-cookies-and-cache/
关于
静态字段适用于存储不需要过期策略的共享数据。
应用程序状态只不过是一个具有与经典ASP兼容的锁语义的静态字典-我只会使用它来向后兼容传统的经典ASP代码。
使用Web API时,缓存的第一选择应该始终是在HTTP响应中设置缓存头。
你最后的选择应该是任何依赖于