Как очистить System.Runtime.Caching.MemoryCache

Я использую System.Runtime.Caching.MemoryCache для хранения элементов, срок действия которых никогда не истекает. Однако иногда мне нужна возможность очистить весь кеш. Как мне это сделать?

Я задал аналогичный вопрос здесь относительно того, могу ли я перечислить кэш, но это плохая идея, так как он должен быть синхронизирован во время перечисления.

Я пробовал использовать .Trim (100) , но это совсем не сработало.

Я попытался получить список всех ключей через Linq, но затем вернулся к тому месту, с которого начал, потому что удаление элементов по одному может легко привести к состоянию гонки.

Я решил сохранить все ключи, а затем выдать .Remove (key) для каждого из них, но здесь также присутствует подразумеваемое состояние гонки, поэтому мне нужно заблокировать доступ к списку ключей, и все снова запутается.

Затем я подумал, что смогу вызвать .Dispose () для всего кеша, но я не уверен, что это лучший подход, из-за способа его реализации.

Использование ChangeMonitors не подходит для моего дизайна и излишне сложно для такого тривиального требования.

Итак, как мне полностью очистить кеш?

38
задан Community 23 May 2017 в 10:29
поделиться