ConcurrentDictionary对象持续多长时间?

时间:2018-04-04 16:40:47

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我在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()

2 个答案:

答案 0 :(得分:3)

  

1)一旦填充完毕,它将持续存在于同一Web应用程序的多个用户访问。我对么?因此,只有网站重启后的第一个用户才会受到性能影响。

是的,static关键字意味着只要应用程序在内存中,就会保留它,除非您以编程方式清除它。无论用户,线程,同步上下文等如何,都将在每个请求中使用相同的实例。

  

2)它持续多久了?是直到另一个池刷新或站点重启,还是存在某种形式的非活动超时?

它将存在,直到有应用程序池刷新或站点重新启动,除非你另外编程。

如果您将此用作缓存目的,则可能对MemoryCache类感兴趣。它允许您设置策略以在特定时间后清除其数据,或者当它检测到您开始内存不足时。

答案 1 :(得分:2)

如果字典确实是静态类级别字段,则只要应用程序池存在,它就会存在。它在同一应用程序池中的用户之间共享。

如果列表仅填充一次取决于您调用填充方法的方式。我建议正确锁定或使用Lazy<T>(使用正确的构造函数)以确保排他性。