2009-11-23 67 views
1

我正在开始一个C#项目,其中某些任务将被分解并在多个线程上运行。我正在寻找尽可能多的好工具来帮助确保我尽可能高效地运行。所以我想看看资源(CPU)使用率,阻塞,死锁,等待工作的线程等等。我希望能够比较不同的方法,以了解在不同条件下最好的方法。监视多线程.NET应用程序的工具,技巧和窍门

我也在研究Perfmon计数器对于优化和比较线程模型有多大用处。

我也买不起任何太贵的东西,所以free-er越好越好。

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

谢谢。

编辑:我绝对在寻找Perfmon的建议,以及任何其他工具,当我想要在生产环境中监控应用程序时,我也可以使用它。因此,需要调试工具,但我也希望工具适用于非调试环境。谢谢。

进一步编辑:这里是因为我问的问题我已经找到了一些有用的链接:

回答

1

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

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

这并不是那么多额外的工作,并且一旦部署完成后,您总能获得。

3

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

+0

哇。这看起来不错。其中一个问题是:2010年是否需要像以前的VS版本那样从2008年“升级”您的项目? – goheen 2009-11-23 10:23:36

+0

请参阅此处:http://stackoverflow.com/questions/916190/vs2010-and-vs2008-project-compatibility – Konamiman 2009-11-23 10:30:43

+0

您可以升级解决方案和项目,但仍旧定位旧的框架版本。多重定位依然可用。 – 2009-11-23 10:31:50

2

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

0

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

1

我建议的另一件事是:暴露你的一些类为wmi实例。这样您就可以调整设置和调用函数而无需重新启动应用程序,这样您可以立即注意到效果。文章见this