HttpRuntime Cache与静态字典/字段

使用HttpRuntime Cache对使用简单静态字段的主要优点缺点是什么?

我需要将数据存储在整个ASP.NET应用程序的范围内。

HttpRuntime.Cache["MyData"] = someHashtable; 

 private static System.Collections.Hashtable _myData; public static System.Collections.Hashtable MyData { get { if (_myData == null) { _myData = new System.Collections.Hashtable(); // TODO: Load data } return _myData; } } 

除非明确设置(意味着对象可以在任何时间到期),否则HttpRuntime.Cache对象具有未知的到期时间,而HashTable对象是活动的,因为您的应用程序池是活动的(除非您手动删除条目)。 HttpRuntime.Cache还允许您设置各种其他特征,例如(可选)缓存项优先级和到期时间。

使用缓存,您可以轻松设置有效期的结束日期; 缓存对象自动使内容过期。

此外,缓存可以被赋予优先级,不太重要的项目可以被赋予低优先级,因此当服务器获得高负载时,该项目首先被删除

但是你总是需要在unit testing中做一些额外的工作,因为在unit testing期间httpcontext不可用。

HttpRuntime.Cache允许您指定过期回调,但是对于静态字典,您将不得不等待查询运行缓存项的过期循环。