我正在Azure应用服务上使用MVC 5、ASP.NET 4.7
我使用ConcurrentDictionary对象来持久化数据,以保存对数据源的多次调用。
关于其行为的几个问题:
1)一旦它被填充,那么它将持续供同一个Web应用程序的多个用户访问。我说的对吗?所以只有网站重新启动后的第一个用户会受到性能影响。
2)它会持续多长时间?是直到另一个池刷新或站点重新启动,还是有某种形式的非活动超时?
先谢谢你。
编辑:
public class myCache
{
private static readonly ConcurrentDictionary<int, string> myCacheDictionary = new ConcurrentDictionary<int, string>();
public static async Task populateCache()
2条答案
按热度按时间jpfvwuh41#
1)一旦它被填充,那么它将持续供同一个Web应用程序的多个用户访问。我说的对吗?所以只有网站重新启动后的第一个用户会受到性能影响。
是的,关键字
static
意味着只要应用程序在内存中,它就会一直存在,除非你通过编程的方式清除它。同一个示例将在每个请求中使用,而不管用户、线程、同步上下文等。2)它会持续多长时间?是直到另一个池刷新或站点重新启动,还是有某种形式的非活动超时?
除非您另行编程,否则它将一直存在,直到应用池刷新或网站重启。
如果您要使用
MemoryCache
类进行缓存,那么您可能会对它感兴趣。它允许您设置策略,在特定时间段后或检测到内存不足时清除其数据。vdzxcuhz2#
如果字典确实是静态类级别字段,则它将与应用程序池的寿命一样长。它由同一应用程序池中的用户共享。
列表是否只填充一次取决于你调用填充方法的方式。我建议正确的锁定或使用
Lazy<T>
(带有正确的构造函数)来确保独占性。