C# System.Runtime.Caching不';t释放BitmapImage对象
我正在使用新的System.Runtime.Caching库在我的应用程序中进行缓存,并在App.config中对其进行了如下定义:C# System.Runtime.Caching不';t释放BitmapImage对象,c#,.net,wpf,caching,.net-4.0,C#,.net,Wpf,Caching,.net 4.0,我正在使用新的System.Runtime.Caching库在我的应用程序中进行缓存,并在App.config中对其进行了如下定义: <system.runtime.caching> <memoryCache> <namedCaches> <add name="MyCache" cacheMemoryLimitMegabytes="10" physicalMemoryLim
<system.runtime.caching>
<memoryCache>
<namedCaches>
<add name="MyCache" cacheMemoryLimitMegabytes="10"
physicalMemoryLimitPercentage="30" pollingInterval="00:00:10" />
</namedCaches>
</memoryCache>
</system.runtime.caching>
然后,从代码中我将其实例化如下:\u cache=newmemorycache(“MyCache”)代码>
并添加如下项:\u cache.add(resourceName,resource,new CacheItemPolicy())代码>
我使用这个缓存来存储位图图像
对象,为了确保缓存正常工作,我向缓存中添加了十个位图图像
对象,每个对象都保存了大约7MB的图像。然后,我等待10秒钟,等待轮询发生,并检查缓存中的条目,但它们都在那里。没有一个对象被逐出
我做错什么了吗?我知道这些设置是从App.config中正确读取的。BitmapImage
实例本身是否很小,并且仅引用磁盘上的映像?缓存如何确定对象的大小?这是因为您正在使用
new CacheItemPolicy()
这将覆盖您的值并为您提供默认值,即绝对过期时间为31/12/9999 11:59:59 PM+00:00
要持续10分钟,你有两个选择
CacheItemPolicy item = new CacheItemPolicy();
item.SlidingExpiration = new TimeSpan(0, 10, 0);
或
如果选择滑动过期,则如果更新对象,10分钟将重置。我已使用char[]
对此进行了测试,即使我使用了new CacheItemPolicy()
,项目仍被逐出。无论哪种方式,为了向缓存中添加项,我必须提供一个CacheItemPolicy
参数。那么,为了获得请求的行为,我需要传递什么值?这仍然不能提供请求的行为。我不想显式设置项目过期的时间-如果超出了app.config
中定义的内存限制,我希望它们过期。此外,我很确定您对项目在9999年12月31日11:59:59 PM+00:00过期的看法是错误的,因为正如我在上面的评论中所说,即使使用策略new CacheItemPolicy()
添加项目,我也确实让项目过期。
item.AbsoluteExpiration = DateTime.Now.AddMinutes(10);