System.Runtime.Caching не освобождает объекты BitmapImage - PullRequest
5 голосов
/ 22 декабря 2011

Я использую новую библиотеку 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 объектов в кэш, каждый из которых содержит изображение около 7 МБ.Затем я подождал десять секунд, пока произойдет опрос, и проверил записи в кэше, но все они были там.Ни один объект не был выселен.

Я что-то здесь не так делаю?Я знаю, что настройки читаются из App.config правильно.Возможно ли, что сами экземпляры BitmapImage маленькие и ссылаются только на образ на диске?И как кеш определяет размер объекта?

1 Ответ

3 голосов
/ 05 января 2012

Это потому, что вы добавляете в кеш с помощью

new CacheItemPolicy()

Это переопределит ваши значения и даст вам значения по умолчанию, что составляет AbsoluteExpiration от 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 минут будут сброшеныВы обновляете объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...