System.Runtime.Caching不会释放BitmapImage对象

时间:2011-12-22 09:38:54

标签: c# .net wpf caching .net-4.0

我正在使用新的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>

然后,从代码中我实例化它:_cache = new MemoryCache("MyCache");

并添加以下条目:_cache.Add(resourceName, resource, new CacheItemPolicy());

我使用此缓存来存储BitmapImage个对象,为了确保缓存正常工作,我在缓存中添加了10个BitmapImage个对象,每个对象都拥有大约7MB的图像。然后我等了十秒钟才进行轮询并检查缓存中的条目,但它们都在那里。没有一个对象被驱逐。

我在这里做错了吗?我知道正确地从App.config中读取设置。 BitmapImage实例本身是否可能很小并且只引用磁盘上的图像?缓存如何确定对象的大小?

1 个答案:

答案 0 :(得分:3)

这是因为您要使用

添加到缓存中
new CacheItemPolicy()

这将覆盖您的值并为您提供默认值,即绝对出现时间为31/12/9999 11:59:59 PM +00:00

要做10分钟就有2个选项

CacheItemPolicy item = new CacheItemPolicy();

item.SlidingExpiration = new TimeSpan(0, 10, 0);

item.AbsoluteExpiration = DateTime.Now.AddMinutes(10);

如果选择滑动过期,则更新对象时将重置10分钟。