我正在使用应用程序中的.NET 4.0 MemoryCache类并尝试限制最大缓存大小,但在我的测试中,似乎缓存实际上并未遵守限制.
我使用的设置,根据MSDN,应该限制缓存大小:
- CacheMemoryLimitMegabytes:对象实例可以增长到的最大内存大小(以兆字节为单位)."
- PhysicalMemoryLimitPercentage: "缓存可以使用的物理内存百分比,表示为1到100之间的整数值.默认值为零,表示 MemoryCache实例根据安装在内存中的内存量管理自己的内存 1电脑." 1.这不完全正确 - 忽略任何低于4的值并替换为4.
我理解这些值是近似值而不是硬限制,因为清除缓存的线程每隔x秒触发一次,并且还取决于轮询间隔和其他未记录的变量.然而,即使考虑到这些差异,在将测试应用程序中的CacheMemoryLimitMegabytes 和PhysicalMemoryLimitPercentage一起或单独设置后,当第一项从缓存中逐出时,我看到了非常不一致的缓存大小.为了确保我每次测试10次并计算出平均值.
这些是在具有3GB RAM的32位Windows 7 PC上测试以下示例代码的结果.在每次测试第一次调用CacheItemRemoved()之后获取缓存的大小.(我知道缓存的实际大小将大于此)
MemLimitMB MemLimitPct AVG Cache MB on first expiry
1 NA 84
2 NA 84
3 NA 84
6 NA 84
NA 1 84
NA 4 84
NA 10 84
10 20 81
10 30 81
10 39 82
10 40 79
10 49 146
10 50 152
10 60 …Run Code Online (Sandbox Code Playgroud) 我想实现一个简单的内存LRU缓存系统,我正在考虑一个基于IDictionary实现的解决方案,它可以处理散列LRU机制.来自java,我有经验LinkedHashMap,可以满足我的需要:我找不到任何类似的.NET解决方案.
有人开发过它或有没有人有这样的经历?