在我的生产服务器上,我有一个使用频繁的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协同工作?