C# System.Runtime.Caching不';t释放BitmapImage对象

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库在我的应用程序中进行缓存,并在App.config中对其进行了如下定义:

<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);