如何防止ASP.NET从缓存中删除项目

9 asp.net caching

我想永久地将一个项目添加到缓存中.我使用以下语法:

HttpContext.Current.Cache.Insert(cacheName, c, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration);
Run Code Online (Sandbox Code Playgroud)

我发现ASP.NET仍然有时会从缓存中删除项目.

关于如何防止这种情况的任何想法(除了删除缓存和使用存储在静态成员中的字典?

马特拉

use*_*706 22

您无法阻止ASP.NET从缓存中删除项目(例如,当内存不足时).

你不可能完全阻止从ASP.NET缓存中删除某些东西(即HttpContext.Current.Cache对象),这非常依赖于设计.

错误!如果使用CacheItemPriority.NotRemovable标记项目,则可以防止将项目从asp.net缓存中删除.每个其他缓存的数据(应用程序,会话等)都以这种方式存储在HttpRuntime缓存中.

人们总是倾向于认为即使这个优先级也不会阻止您的数据过期,但这是由于缺乏适当的文档.我认为这种混淆伴随着从缓存中手动删除这样一个项目的能力,或者由于为它设置的依赖项而被删除的项目.

因此,如果您从未手动删除它,并且从不指定可以删除它的依赖项,那么您可以在appdomain的生命周期中使用您的项目.


M4N*_*M4N 1

我的回答不正确。请参阅此处以获得正确答案。


您无法阻止 ASP.NET 从缓存中删除项目(例如,当内存不足时)。

如果您需要在应用程序的整个生命周期中存储数据,请将其放入 ApplicationState 集合中,例如:

Application["myData"] = ...;
Run Code Online (Sandbox Code Playgroud)

这类似于 SessionState 集合,但正如名称所示,它是应用程序范围的。

  • 错误的。请参阅下面用户134706的回答。 (2认同)