You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service中ConcurrentDictionary的持久时长与多用户访问问题

嘿,针对你在Azure App Service上基于ASP.NET 4.7 MVC5,用ConcurrentDictionary做数据持久化来减少数据源调用的问题,我给你详细解答下:

问题1:多用户访问与初始化性能损耗

你的理解完全正确!只要你把ConcurrentDictionary定义为静态成员(这也是这类缓存场景的常规做法),它就属于整个Web应用的应用域(AppDomain)级别资源——填充完成后,同一Web应用的所有用户请求都可以直接访问到这个对象里的数据。

因为静态对象会被应用内所有请求线程共享,而且ConcurrentDictionary本身就是线程安全的设计,多用户并发访问也不会出现数据冲突或异常。所以只有在网站重启(比如部署新版本、应用池回收后),第一个触发填充逻辑的用户请求会承担加载数据的性能损耗,后续所有用户都能直接复用缓存好的数据,不用再去调用数据源。

问题2:ConcurrentDictionary的持久时长

这个对象的存活时间完全和应用池/应用域的生命周期绑定,具体来说:

  • 正常运行状态下,只要应用池没有被回收、网站没有手动重启,ConcurrentDictionary里的数据就会一直存在;
  • 当遇到以下场景时,它会被销毁:
    • 应用闲置超时:Azure App Service默认会在应用20分钟没有任何请求时,将应用休眠回收,这时候应用域被销毁,缓存数据也就没了;
    • 应用池定期回收:默认配置下应用池会每29小时自动回收一次(你也可以在Azure门户里自定义这个周期);
    • 网站部署更新、手动重启;
    • Azure平台的后台维护、资源调整导致应用重启。

需要注意的是,ConcurrentDictionary本身没有内置的闲置超时机制,不会自己清空数据——只有当承载它的应用域被销毁时,它才会被回收。


内容的提问来源于stack exchange,提问作者SamJolly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:45:30