繁体   English   中英

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

[英]Tools, tips, and tricks for monitoring multithreaded .NET applications

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

我还希望了解哪些Perfmon计数器在尝试优化和比较线程模型方面或多或少有用。

我也买不起任何昂贵的东西,所以越便宜越好。

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

谢谢。

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

进一步的编辑:自从我问了这个问题之后,我发现了一些有用的链接:

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

在调试线程时对我有帮助的一个“窍门”是记住设置每个线程的name属性,因为它在调试过程中很有帮助。 如果未分配线程的Name属性,则它的值为null,调试窗口将显示<No name> ,因此它不会很有帮助。

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

通过创建一个记录器类并检测我的代码,我获得了最好的结果,这样我就可以捕获线程启动和停止的时间以及测量其内部进程的经过时间。 您还可以使用各种.Net库来捕获内存负载,如此处所述: 如何获取可用的内存或在C#中使用内存

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

不需要太多的工作,并且一旦部署就可以拥有它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM