我在Azure App Services上使用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()
答案 0 :(得分:3)
1)一旦填充完毕,它将持续存在于同一Web应用程序的多个用户访问。我对么?因此,只有网站重启后的第一个用户才会受到性能影响。
是的,static
关键字意味着只要应用程序在内存中,就会保留它,除非您以编程方式清除它。无论用户,线程,同步上下文等如何,都将在每个请求中使用相同的实例。
2)它持续多久了?是直到另一个池刷新或站点重启,还是存在某种形式的非活动超时?
它将存在,直到有应用程序池刷新或站点重新启动,除非你另外编程。
如果您将此用作缓存目的,则可能对MemoryCache
类感兴趣。它允许您设置策略以在特定时间后清除其数据,或者当它检测到您开始内存不足时。
答案 1 :(得分:2)
如果字典确实是静态类级别字段,则只要应用程序池存在,它就会存在。它在同一应用程序池中的用户之间共享。
如果列表仅填充一次取决于您调用填充方法的方式。我建议正确锁定或使用Lazy<T>
(使用正确的构造函数)以确保排他性。