使用 Castle 单例是不是会导致 ASP.NET Web 应用程序中的争用

Posted

技术标签:

【中文标题】使用 Castle 单例是不是会导致 ASP.NET Web 应用程序中的争用【英文标题】:Does using a Castle singleton cause contention in ASP.NET web application使用 Castle 单例是否会导致 ASP.NET Web 应用程序中的争用 【发布时间】:2011-11-16 14:30:35 【问题描述】:

我在一个用 ASP.NET 中的单例生活方式实例化的类中使用只读字典对象。对字典对象的访问没有锁定。

考虑到可能有许多 Web 请求同时访问它,您是否希望在读取该对象时存在任何 .NET 争用

【问题讨论】:

【参考方案1】:

这个问题实际上是关于字典线程安全的,Windsor 是无关的。

假设您使用的是标准的 .NET 集合, MSDN docs for System.Collections.Generic.Dictionary<K,V> 说:

一个 Dictionary(TKey, TValue) 可以同时支持多个阅读器,只要不修改集合即可。

但如果你有并发写入者,它就不是线程安全的,这意味着它可能不会在内部锁定任何东西,所以我不希望有任何争用。

【讨论】:

谢谢,我就是这么想的。我的应用程序正在接受性能测试,并且报告了高水平的 .NET 争用。但是,鉴于这没有涉及锁定,那么我看不出这会对它有任何影响。你怎么看? “正在报告高水平的 .NET 争用”-> 他们如何测试它?为什么测试不指向源? 这是在压力测试期间发生的。他们正在使用 .NET 争用性能计数器进行测量,因此很难立即知道它可能发生在应用程序的哪个位置 @Mark909 : 你见过***.com/questions/2222826/… ***.com/questions/2169143/… 太好了,谢谢。我会试试看。感谢您对这个问题的所有帮助,非常感谢。【参考方案2】:

您使用的是哪个版本的温莎城堡? 它是 3.2 版本中的一个错误 - https://github.com/castleproject/Windsor/issues/34

升级版本

【讨论】:

以上是关于使用 Castle 单例是不是会导致 ASP.NET Web 应用程序中的争用的主要内容,如果未能解决你的问题,请参考以下文章

使用较新版本的 Bouncy Castle 时,接收方无法验证 SMIME

ASP.NET 核心标识。使用 ApplicationDbContext 和 UserManager。他们是不是共享上下文?

静态类 VS 单例模式

构建 ASP.NET Web Api 时是不是必须使用 HTTP 协议和 HttpResponseMessage 类?

个人对单例模式的理解

多线程与单例模式