На моем рабочем сервере у меня есть сильно используемый экземпляр SQL Server и мое приложение, которое является службой Windows C#. Мой сервис выполняет различные задания в разное время. Каждые 24 часа он отправляет электронное письмо с информацией о ходе выполнения различных заданий.MemoryCache Неожиданное выселение в C#
Код определяет, следует ли отправлять электронную почту, проверив флаг в кэше памяти. Код выглядит следующим образом: -
if (Common.MemCache.Get(Common.MemoryCacheActions.DailyEmail) == null)
{
Common.Logger.Info("Collating email data.");
Common.MemCache.Add(Common.MemoryCacheActions.DailyEmail, String.Empty, DateTime.Now.AddHours(24));
SendEmail();
}
В моих основных проверках петли для нулевой записи каждой минуты или около того, я получаю много писем. Это почти так, как если бы «Добавить» не удался или элемент был выселен?
Я читал в местах, где предметы могут быть выселены, если недостаточно памяти. Как это происходит в то время, когда это происходило, в SQL Server выполнялся сценарий обслуживания, и доступная память на ящике была в значительной степени нулевой. Я закрыл несколько программ, которые у меня были на сервере, хром, SSMS и т. Д., И больше не записывать записи в журнал или электронные письма.
Как я уже установил Истечение срока действия до + 24 часа, я ожидаю, что он добавит товар в течение 24 часов!
Каково решение здесь, нужно ли установить CacheItemPriority NotRemoveable, а затем вручную удалить элемент через 24 часа?
Вид поражения в том, как я использую свой кеш, или NotRemovable работает в тандеме с AbsoluteExpirationDate?