【问题标题】:Visual studio slowing down application视觉工作室减慢应用程序
【发布时间】:2011-01-06 23:59:40
【问题描述】:

这是一个含糊不清的问题,但是对于 Visual Studio 减慢应用程序的速度我能做些什么吗?如果我在 Visual Studio 之外运行可执行文件,它会以非常可接受的速度运行。如果我在启用调试器的 Visual Studio 中运行它,它的运行速度会慢近 200 倍。我试图卸载并重新安装 Visual Studio 无济于事。我删除了所有插件(蚂蚁和 resharper),但仍然没有。我已经在另一台计算机上的视觉工作室中运行了该项目,并且速度正常。我能做些什么来解决这个问题?这似乎是最近发生的,但可能是逐渐发生的。

更新:我现在已经在其他视觉工作室中运行过它,并且速度仍然缓慢。我唯一的结论是,我以我在应用程序中的速度分配内存的方式导致调试器以某种方式减慢速度。有没有人遇到过这种情况?

【问题讨论】:

  • 大量加载和卸载dll?整体速度变慢还是启动时间大大变慢?
  • 您的应用程序是否在转储大量调试消息?如果是这样,那可能就是原因。

标签: c# visual-studio debugging


【解决方案1】:

在调试器中运行的异常非常昂贵,如果抛出和捕获许多异常,可能会减慢应用程序的速度。查看 Visual Studio 的输出窗口,您可以在其中看到抛出的异常。

【讨论】:

  • 异常是我所见过的调试器中减速的第一大原因。转到“异常”对话框(在“调试”菜单上)并让 Visual Studio 中断所有异常,而不仅仅是未处理的异常。
  • 我有一个类似的问题,应用程序在调试过程中非常慢,但在没有调试的情况下运行起来就像一个魅力。原来devexpress gridcontrol 吞噬了很多FormatException 的。修复错误后,在调试模式下渲染网格的时间从 35 秒缩短到 1 秒。
【解决方案2】:

您是否从符号服务器中提取符号?这是减速的常见原因。

检查 _NT_SYMBOL_PATH 是否已设置,如果使用 VS 2008 +,请检查您的调试选项

【讨论】:

  • 可能的。工具 + 选项,调试 + 符号。
【解决方案3】:

一般来说,Visual Studio 调试器不会减慢速度。这必须是特定于您的应用程序的内容。

例如,最近有人提出了一个关于 SO 的问题,他在调试时收到 OutOfMemoryException,但在调试器之外运行时却没有。这似乎是由于他分配内存的方式 - 该技术对加载到内存中的程序集的数量很敏感。大多数程序不会对调试器的这种被动影响敏感。也许您也受到与调试器相关的一些影响,但不完全是调试器的“故障”。


Mitch Wheat 建议您可能正在运行病毒扫描程序。这让我想起了一个类似的软件,它自己关注 Visual Studio 加载和卸载程序集。这是一款提供“端点安全”的 VPN 软件。它旨在检查您在连接到 VPN 时正在运行哪些程序,并确保它们符合安全策略。这意味着被告知每个加载的程序集。

Visual Studio 加载和卸载大量程序集。这个 VPN 软件对这个事实非常感兴趣,以至于它实际上导致了 BSOD——这是我唯一一次看到应用程序导致 BSOD——因为它安装了文件系统过滤器或类似的东西,并且在内核模式下被通知。再加上某种错误足以让系统崩溃。

因此,一般来说,寻找一些关心您计算机上运行的软件的软件。也许是“端点安全”,也许是病毒扫描程序,也许是搜索索引器,或者其他什么。

【讨论】:

    【解决方案4】:

    问题在于,如果 Windows 检测到您的程序正在调试器下运行,它就会进入一个特殊的调试堆。这似乎发生在操作系统级别,并且独立于您的编译的任何调试/发布模式设置。

    您可以通过设置环境变量来解决此“功能”:_NO_DEBUG_HEAP=1

    同样的问题已经让我发疯了一段时间;今天我发现了以下内容,这篇文章的来源: http://blogs.msdn.com/b/larryosterman/archive/2008/09/03/anatomy-of-a-heisenbug.aspx

    【讨论】:

      【解决方案5】:

      VS 调试器会在您的代码中添加额外的命令,以实现它带来的所有功能。缺点可能是减慢您的应用程序。

      也许这就是当您在另一台计算机上运行可执行文件时您的应用运行良好的原因。

      那么这是一个不应该打扰你的问题,因为应用程序的发布版本很重要——如果最终版本运行良好,谁在乎调试版本的性能。

      【讨论】:

      • 如果调试器的性能大大降低了您的速度,从而显着影响了您的工作效率,那么这是您应该关心的问题。
      • 同意@SamHolder。我有一个 WPF 应用程序由于设置图像控件的 ImageSource 的错误而在调试模式下挂起,当该值是空字符串或不可用程序集的路径时,调试器挂起 10-20秒最终导致我的应用程序爬行,我正在播放的音频(在应用程序中)断断续续,应用程序几乎没有响应。在发布模式下它工作正常。所以我必须诊断问题并解决减速问题,因为否则我无法开发应用程序。
      猜你喜欢
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多