【问题标题】:Where on the server are static concurrent collections stored?静态并发集合存储在服务器的什么位置?
【发布时间】:2015-01-09 17:59:28
【问题描述】:

我正在使用一个使用静态 ConcurrentDictionary 对象进行缓存的类。当请求数据时,它首先在 ConcurrentDictionary 中查找。如果在那里找不到,则从数据库中检索它,并将其放入 ConcurrentDictionary。

数据在多个请求中保留在此集合中,这是应该的。但这种特殊行为是因为它是 ConcurrentDictionary 而不是常规 Dictionary,还是仅仅是任何静态对象的行为?

另外,有时当我加载页面时,它必须从数据库中重新加载数据。这些数据存储在哪里,什么会导致这个缓存/字典被清除? IIS 中是否有控制此设置的网站或应用程序池的超时设置?

【问题讨论】:

  • 对为什么这被否决有任何反馈吗?

标签: .net caching iis static


【解决方案1】:

ConcurrentDictionary 在处理多个线程时非常有用——它可以防止对同一个键进行多次“写入”操作。

static 变量在处理跨多个请求/用户的共享数据时非常有用(但可能不是线程安全的)。

简而言之:

  • 由于其static 属性,它被多个用户共享。
  • 它阻止了多个线程访问字典,因为它是一个ConcurrentDictionary

关于你的第二部分问题:

你的类的静态变量在应用程序之前不会被垃圾收集 托管您的课程的域已卸载

看看这个答案:How and when are c# Static members disposed?

【讨论】:

  • 谢谢。但是什么时候卸载应用程序域?除非重新启动 IIS 或托管服务器,否则它是否应该无限期保留?还是在某处设置了超时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2014-05-08
  • 2021-03-28
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多