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

本文关键字:释放 BitmapImage 对象 Runtime Caching System | 更新日期: 2023-09-27 18:18:46

我正在使用新的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对象,为了确保缓存正常工作,我在缓存中添加了十个BitmapImage对象,每个对象保存一个大约 7MB 的图像。然后,我等待了十秒钟进行轮询,并检查了缓存中的条目,但它们都在那里。没有一个对象被逐出。

我在这里做错了什么吗?我知道设置是从应用程序配置中正确读取的。是否有可能BitmapImage实例本身很小,只引用磁盘上的映像?缓存如何确定对象的大小?

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

这是因为您要将

new CacheItemPolicy()

这将覆盖您的值并为您提供默认值,即 AbsoluteExpires 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 分钟。