相关疑难解决方法(0)

MemoryCache在配置中不遵守内存限制

我正在使用应用程序中的.NET 4.0 MemoryCache类并尝试限制最大缓存大小,但在我的测试中,似乎缓存实际上并未遵守限制.

我使用的设置,根据MSDN,应该限制缓存大小:

  1. CacheMemoryLimitMegabytes:对象实例可以增长到的最大内存大小(以兆字节为单位)."
  2. PhysicalMemoryLimitPercentage: "缓存可以使用的物理内存百分比,表示为1到100之间的整数值.默认值为零,表示 MemoryCache实例根据安装在内存中的内存量管理自己的内存 1电脑." 1.这不完全正确 - 忽略任何低于4的值并替换为4.

我理解这些值是近似值而不是硬限制,因为清除缓存的线程每隔x秒触发一次,并且还取决于轮询间隔和其他未记录的变量.然而,即使考虑到这些差异,在将测试应用程序中的CacheMemoryLimitMegabytesPhysicalMemoryLimitPercentage一起或单独设置后,当第一项从缓存中逐出时,我看到了非常不一致的缓存大小.为了确保我每次测试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)

.net c# caching memorycache

84
推荐指数
3
解决办法
3万
查看次数

是否存在IDictionary的LRU实现?

我想实现一个简单的内存LRU缓存系统,我正在考虑一个基于IDictionary实现的解决方案,它可以处理散列LRU机制.来自java,我有经验LinkedHashMap,可以满足我的需要:我找不到任何类似的.NET解决方案.

有人开发过它或有没有人有这样的经历?

c# caching programming-languages

27
推荐指数
5
解决办法
2万
查看次数

标签 统计

c# ×2

caching ×2

.net ×1

memorycache ×1

programming-languages ×1