调试模式下应用程序运行非常缓慢

6

我的C#程序应该每秒执行30次异步任务。

该程序作为独立的Windows应用程序表现良好。

但是当它在Visual Studio 2013 Professional环境的调试模式下运行时,性能非常差 - 即使没有任何断点,每秒只能执行5个任务。

慢速调试是否是VS.Net 2013的“特性”,是否有一种方法可以调试时间关键的C#应用程序?


2
您说它在Debug模式下运行缓慢,但没有其他信息。它在Release版本下是否运行更快,但仍在调试器下?直接运行Debug构建呢(在VS之外)? - Jonathon Reinhart
已经有一些关于此问题的报告。首先,请更新您的显卡驱动程序(是的,这可能是一个问题)。其次,您是否正在运行Windows 8.1?如果是-那里也有一些已知的IE11问题。 - Ahmed ilyas
在调试模式下,发布版的性能同样很差。但是当我不使用调试启动程序时,它就可以正常运行。该任务需要进行大量计算,因此显卡不是问题。我的电脑运行在Win 7 Prof下。在VS之外进行的调试构建也可以正常运行。 - Vladimir
一个可能导致巨大减速的问题是异常日志记录。请检查输出窗口是否正在记录异常。 - stijn
日志中没有异常,但程序使用log4Net库进行了大量记录。记录是必需的功能,在没有调试的情况下工作正常。 - Vladimir
4个回答

7

感谢user1720293提出的有关日志记录的想法。导致性能大幅下降的主要原因是通过log4net.Appender.ConsoleAppender记录日志到控制台。在配置文件中注释掉一行后,问题解决了。

  <root>
    <level value="DEBUG"/>
    <!-- here's the source of the problem
    <appender-ref ref="ConsoleAppender"/>
    -->
    <appender-ref ref="RollingFile"/>
  </root>

1
我会尝试通过以下方法来消除一些问题: 删除所有的观察项 隐藏本地变量、自动窗口等
你是否在追踪大量文本?你也可以尝试不这样做,看看是否有所改善。
你的杀毒软件是否让 Visual Studio 单独运行?
如果它不是纯 C# 代码,并且涉及到 C++,则调试性能很差。
这些都不是针对 Visual Studio 13 的具体建议。 你之前是否在 2012 或 2010 上成功运行过这段代码?

关闭日志记录后,调试模式下的性能飙升至每秒16个任务,令人惊叹。log4net库与这样的调试性能下降有何关系?为什么它不会影响独立应用程序的性能? - Vladimir

1
你提到正在大量使用log4net。如果每次记录日志时都将其打印到输出流中,这会导致性能问题。
控制台输出始终很慢。考虑使用预处理器来挑选所需的日志记录。
#if HEAVY_LOGGING_MODE
//log log log
#endif

Log4Net可能支持更好的机制。请查看文档!

0
代码中过多的断点可能会影响调试模式下的性能。请尝试删除无用的断点。

1
实际上,这并不是真的。您可以拥有任意多个断点,但肯定不会像报道的那样影响IDE的性能。此外,用户报告称即使几乎没有断点,也存在同样的问题。 - Ahmed ilyas
3
如果有带条件的断点,而该条件永远不为真,那么在通过调试器执行程序时,这肯定会导致程序变慢。虽然在这种情况下可能并不相关,但仍需注意。 - Lasse V. Karlsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接