VS 2015诊断工具减速时间

时间:2017-10-11 16:35:53

标签: c# .net visual-studio debugging visual-studio-2015

我正在努力解决这个问题,这个问题让我暂时无法正常调试,而且无法在网上找到有关它的信息。

问题在于,当我使用调试器运行我的应用程序时,除了它的性能比没有它更糟糕的事实,当我查看诊断工具的时间线时,我可以看到它不匹配与应用程序运行的时间。我认为通过一个例子可以更好地理解:

  1. 我开始在t_real = 0 t_debug = 0
  2. 调试我的应用程序
  3. 程序开始执行一些相对苛刻的操作。调试器从现在开始影响性能。 t_real = 5 t_debugger = 5
  4. 计算结束。 t_real = 30 t_debugger = 100
  5. 为什么会出现时间差异?我正在使用具有多个线程的C#.NET应用程序。

2 个答案:

答案 0 :(得分:1)

诊断工具会收集许多数据信息,如CPU使用率/内存或其他信息,它实际上会或多或少地影响VS性能。

实际上我还向产品团队报告了一个问题,Nik分享了为什么它有如此庞大的I / O的道路。即使它与您的问题不同,但至少,我们可以知道诊断工具真的很忙,无法收集更多信息:)

Visual Studio 2015 StandardCollector.Service.exe runaway I/O

如果您想在不收集诊断信息的情况下调试应用程序,可以在TOOLS->选项 - >调试下禁用此工具。

当然,如果你有充分的建议,你也可以提交请求here

答案 1 :(得分:0)

免责声明:我在Visual Studio上工作,特别是诊断工具。

很常见的是,诊断工具显示的应用程序时间与感知的应用程序时间不匹配。这是因为调试器正在您的进程内部执行操作,并且我们不希望它在捕获跟踪中显示。为了解决这个问题,我们基本上得到了调试器开始在进程中工作以及何时停止的时间戳。然后我们减去这个超时,这是用户代码的实际应用程序处理时间,并在泳道图中显示。我的猜测是你的应用程序/调试设置正在做一些需要大量调试器干预的事情。

一个简单的例子是一个控制台应用程序,它在循环中抛出并捕获异常(见下文)。你可以在调试器中运行这个应用程序,甚至不用停止,因为调试器在每次抛出过程中都在你的进程内工作,它似乎几乎没有爬行。

namespace ConsoleApp2 {
    using System;

    class Program {
        static void Main(string[] args) {
            while (true) {
                try {
                    throw new Exception();
                } catch (Exception) { }
            }
        }
    }
}