Могу ли я перебрать.NET4 MemoryCache?
Я использую кеш, предоставленный System.Runtime.Caching.MemoryCache
,
Я хотел бы перечислить элементы кэша, чтобы можно было сделать недействительными (исключить и перезагрузить) элементы как таковые
foreach (var item in MemoryCache.Default) { item.invalidate() }
Но официальные документы, найденные здесь, заявляют:
Важно: получение перечислителя для экземпляра MemoryCache является ресурсоемкой и блокирующей операцией. Поэтому перечислитель не должен использоваться в производственных приложениях.
Наверняка должен быть простой и эффективный способ перебора элементов кэша?
3 ответа
Сделанные до сих пор предложения были отличными, но моя потребность все еще в том же виде: перебирать элементы кеша. Это кажется такой простой задачей, и я ожидаю, что кеш внутри все равно будет иметь какую-то структуру списка. Документы и набор функций для MemoryCache
хотят.
Итак, как обсуждалось выше, я добавил список в свой класс адаптера кеша, который содержит ссылку на каждый элемент, который я помещаю в кеш. Если мне нужно перебрать кеш - не только для аннулирования, но и для сбора статистики и т. Д.- тогда я перебираю свой список.
Если количество элементов, помещаемых в кеш, не изменяется, то это разумное решение. Если число действительно меняется, то вам нужно вставить / удалить через класс адаптера, чтобы синхронизировать список с фактическим кешем. Грязно, но это работает, и избегает штрафных санкций, на которые ссылаются в документах.
С надеждой MemoryCache
поставщик кеша будет конкретизирован в следующем выпуске платформы.
Подумайте об использовании ChangeMonitors, которые позволяют автоматически удалять устаревшие записи, когда выполняются определенные условия.
См. Есть ли какой-то тип CacheDependency в System.Runtime.Caching?
Это похоже на System.Web.Caching CacheDependencys, который позволяет исключать записи при изменении файлов или других записей кэша.
В 2014,
Это правильный способ получить все предметы:
Dim AllItems = MemoryCache.Default.Select(Of ItemType)(Function(O) O.Value)
Надеюсь, это кому-нибудь поможет.