用于监视多线程.NET应用程序的工具,技巧和窍门

时间:2009-11-23 10:08:27

标签: c# .net performance multithreading monitoring

我正在着手一个C#项目,其中某些任务将被分割并在多个线程上运行。我正在寻找尽可能多的好工具来帮助确保我尽可能高效地运行。所以我想观察资源(CPU)使用,阻塞,死锁,等待工作的线程等等。我希望能够比较不同的方法,看看哪种方法在不同条件下效果最好。

我还想了解Perfmon计数器对于尝试优化和比较线程模型或多或少有用。

我也买不起任何太贵的东西,所以免费更好。

这是.NET 3.5上的一个C#项目,使用VS 2008(虽然我可以使用VS 2010测试版,如果它为线程提供了更多帮助,我听说过它。)

感谢。

编辑:我肯定在寻找Perfmon的建议,以及我想在生产环境中监控应用程序时也可以使用的任何其他工具。因此,需要调试工具,但我也需要非调试环境的工具。 THX。

进一步编辑:自从我提出问题以来,我发现了一些有用的链接:

5 个答案:

答案 0 :(得分:3)

确实,Visual Studio 2010是一个不错的选择:http://www.danielmoth.com/Blog/2009/05/parallel-tasks-new-visual-studio-2010.html

答案 1 :(得分:2)

在调试线程时帮助我的一个“技巧”是记住设置每个线程的name属性,因为它在调试过程中有很大帮助。如果未分配线程的Name属性,则它具有空值,并且调试窗口将显示<No name>,因此它不会非常有用。

答案 2 :(得分:1)

我建议的另一件事是:将一些类暴露为wmi实例。这样您就可以在不重新启动应用程序的情况下调整设置和调用函数,这样您就可以立即注意到这些效果。请参阅this文章。

答案 3 :(得分:1)

我通过创建一个记录器类并检测我的代码获得了最好的结果,这样我就可以在线程启动和停止时捕获并测量其内部进程的已用时间。您还可以使用各种.Net库来捕获内存负载,如下所述:How to get memory available or used in C#

我已经登录到队列,数据库(System.Data.Sqlite非常适合这个)和文件。甚至是一个cobmination队列 - &gt;数据库与记录器在一个单独的线程上。这对多线程Windows服务特别有用,因为我可以在运行时监视日志,甚至可以通过一个小的Windows应用程序通过单独的控制表控制日志记录的详细程度。即使是系统管理员也觉得它很容易使用。

这不是那么多额外的工作,一旦部署,你总是拥有它。

答案 4 :(得分:0)

我知道这是一个C#问题,但仍然是:在C#中你可以使用任何CLR库,包括用F#编写的库。在F#中,由于其功能性(没有副作用),很多情况下并发变得非常容易。也许在F#中写一些部分可能会付出代价。