【问题标题】:Tools, tips, and tricks for monitoring multithreaded .NET applications用于监视多线程 .NET 应用程序的工具、提示和技巧
【发布时间】:2009-11-23 10:08:26
【问题描述】:

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

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

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

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

谢谢。

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

进一步编辑:以下是我提出问题后发现的一些有用链接:

【问题讨论】:

    标签: c# .net performance multithreading monitoring


    【解决方案1】:

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

    【讨论】:

    • 哇。看起来很棒。一个后续问题:2010 年是否要求您像以前的 VS 版本一样从 2008 年“升级”您的项目?
    • 您可以升级解决方案和项目,但仍以旧框架版本为目标。多重定位仍然可用。
    【解决方案2】:

    在调试线程时帮助我的一个“技巧”是记住设置每个线程的 name 属性,因为它在调试过程中很有帮助。如果线程的Name属性没有赋值,它有一个空值,调试窗口会显示<No name>,所以用处不大。

    【讨论】:

      【解决方案3】:

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

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

      这并没有太多额外的工作,而且您在部署后始终拥有它。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2011-02-17
            • 1970-01-01
            • 2010-10-27
            • 1970-01-01
            • 1970-01-01
            • 2014-04-01
            • 1970-01-01
            • 2011-02-20
            • 1970-01-01
            相关资源
            最近更新 更多