В своем приложении я использую MemoryCache, но не ожидаю, что срок действия элементов истечет. Поэтому элементы вставляются в кеш с политикой по умолчанию, без установки AbsoulteExpiration
или SlidingExpiration
.
Недавно на последнем высоком сервере у меня возникли проблемы с кешем, так как он возвращал нулевые значения вместо желаемых значений, вставленных в кеш ранее. Выяснилось, что из кеша удаляются не только элементы, срок действия которых истекает (как и те, срок действия которых указан явно). При нехватке памяти, когда значения CacheMemoryLimit
и/или PhysicalMemoryLimit
превышаются, MemoryCache также удаляет другие элементы.
Как предотвратить это? Как быть уверенным, что когда элемент один раз помещается в кеш, его можно безопасно извлечь из него снова?
Я решил установить для PollingInterval
какое-то огромное значение, но это только отсрочит потенциальную проблему (и интервал опроса упоминается в документации как максимальное время, а не точное или минимальное время). Установка PhysicalMemoryLimitPercentage
на 100% также не решает проблему, поскольку она относится к физически установленной памяти, а не ко всей доступной виртуальной памяти. Или я ошибаюсь и это действительно поможет?
CacheItemPolicy
имеет Свойство Priority, для которого можно установить значениеNotRemovable
. - person Eric B   schedule 27.11.2017