在我的生產服務器上,我有一個使用頻繁的SQL Server實例和我的應用程序,它是一個c#Windows服務。我的服務在不同的時間運行各種工作。每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中運行,並且盒子上的可用內存幾乎爲零。我關閉了我在服務器上運行的幾個程序,chrome,SSMS等,並且沒有更多的日誌條目或電子郵件。
由於我已明確設置項目的到期時間爲現在+ 24小時,因此我希望它可以在24小時內添加項目!
這裏有什麼解決方案,我必須將CacheItemPriority設置爲NotRemoveable,然後在24小時後手動刪除項目嗎?
這種類型打敗了我如何使用我的緩存,或將不可拆卸與AbsoluteExpirationDate協同工作?