在C#应用程序中监视线程的工具

时间:2015-01-30 08:15:34

标签: c# multithreading

我目前正在分析我的代码和应用程​​序是否有资源泄漏。如何监视当前正在运行的线程的C#进程?

3 个答案:

答案 0 :(得分:2)

这是我在需要找到泄漏时使用的方法:

  1. 打开内存分析器 我使用perfmon
    This文章提供了一些关于设置perfmon的内容,@fmunkert也很好地解释了它。
  2. 在代码中找到您怀疑泄漏可能位于该区域的区域。这部分主要取决于您对代码中负责该问题的部分有很好的猜测。
  3. 将泄漏推至极端:使用标签和"转到"用于隔离区域/功能并多次重复可疑代码(循环将起作用。我发现这个问题更方便)。
  4. 在循环中,我使用了断点,每50次命中停止一次,以检查内存使用量的增量。当然,您可以将值更改为应用程序中明显的泄漏更改。
  5. 如果找到导致泄漏的区域,则内存使用量应迅速增加 如果内存使用量没有增加,请使用您怀疑是根本原因的另一个代码区域重复1-4阶段。如果是,请继续6。
  6. 在您发现原因的区域,使用相同的技术(转到+标签)放大并隔离区域的较小部分,直到找到泄漏的来源(请不要为了递归步骤......:0))。
  7. 请注意,此方法的缺点是:

    1. 如果要在循环中分配对象,则它的处理也应包含在循环中。
    2. 如果你有多个泄漏源,那就更难发现(但仍然可能)
    3. 祝你好运......

答案 1 :(得分:1)

已经存在一个工具,Parallel Stacks。要打开它,请单击

  

调试 - > Windows - >并行堆栈

您可以在MSDN处快速查看如何使用并行堆栈。

答案 2 :(得分:0)

如果您有visual studio 2013您可以下载Microsoft Concurrency Visualizer for Visual Studio:

https://msdn.microsoft.com/en-us/library/dd537632.aspx

它可以深入了解当前运行的应用程序和线程。

同步,睡眠,阻塞等 在此旁边,您还可以下载扩展程序(在同一页面上找到)

在我看来,这是一个很棒的工具(最重要的是免费)