使用C#/ .NET分析工具来查找竞争状态/死锁

有没有一个分析.NET代码和发现竞争条件的工具?

我有一些代码有一个公共静态属性获取或创build一个私人静态字段。 它也有一个公共的静态方法,将该字段设置为null(…是的,我知道!)

由于这两种方法都没有锁,所以可以肯定的是,将来事情会变得非常糟糕。 我需要一个工具recursion地通过调用这些方法之一的东西,看看是否有任何东西在另一个线程上产生。

我正在寻找一个工具或者nDepend SQL脚本(如果这是可能的话)。

你可能正在寻找其中的一个:

  • Typemock赛车手

:这个答案是从2010年。与所有build议的答案,build议往往会随着时间的推移而改变。 现在可能还有其他产品,微软研究实验室的CHESS项目可能已经演变成最终产品,或者完全被淘汰。 请用一点盐来回答这个问题,然后对现在适用的产品进行新的研究。

Jinx会在运行时执行此操作(不是静态的),但可能值得一看。

你可能想看看CHESS 。

请参阅此处的答案: 哪些静态分析工具可用于C#?

一些静态分析工具可以进行死锁检测。

另外,试试微软的FxCop 。

我一直在试验如何轻松跟踪这些。 我一直在努力追踪一些死锁,特别是在使用许多不同的locking语句的情况下。

我的目标是在发生死锁之前检测死锁,例如,如果您有两个资源,则必须始终按照相同的顺序使用它们,否则可能会发生死锁。

lock (lockObj1) lock (lockObj2) { // some code } 

…在应用程序的其他地方…

 lock (lockObj2) lock (lockObj1) // <- I expect some "possible deadlock" detection here { // some code } 

在这种情况下,我使用lockObj1然后lockObj2在一个地方,并在另一个地方使用它们的相反顺序,这是你应该避免在应用程序中的东西当然,locking语句不需要使用一个后其他像在这个例子中,你的复杂应用程序可能有多个复杂的对象相互作用

我已经在https://github.com/glmnet/LockTracer这里上传了testing用例的代码;

你看过红门ant吗? 我不确定它是否能满足您的所有需求,但是它是一个很好的产品:

  • 在几分钟之内识别性能瓶颈
  • 优化.NET应用程序的性能
  • 深入探索,以行级定时来减慢代码行
  • configuration文件aspx,ASP.NET,C#代码和VB.NET应用程序