【问题标题】:Visual Studio 2010 extremely slow when populating ListBoxes while debuggingVisual Studio 2010 在调试时填充 ListBox 时速度极慢
【发布时间】:2012-05-24 03:32:56
【问题描述】:

在 VS2010 中进行调试时,程序的运行速度自然会比其他方式慢很多。

但是,如果我更新 ListBox 的值,最近我的程序运行速度非常慢。 (其他控件也可能会受到影响,我不确定……但 ListBox 是肯定的)。

在调试器之外在几分之一秒内发生的操作,例如向 ListBox 添加 100 个元素,在 VS 中可能需要 3 到 5 分钟。

显然,这不是正常行为。

我不确定这从何时开始,但并非一直如此。它开始发生在几个月前。也许当我安装服务包时?我不确定。

当我查看进程时,msvsmon.exe 正在消耗 CPU。

如果在某处我可能更改了导致此问题的某些选项,有什么想法吗?我正在尝试使用包含 8,000 个元素的 ListBox 来调试某些东西,但这是完全不可能的。

Windows 7 x64、4GB RAM、VS2010-SP1

【问题讨论】:

  • 问:什么语言:C#? VB.Net?其他?问:什么目标:Winforms? WPF?其他?问:当应用程序从 MSVS 调试器运行时,它的行为如何?问:当您为“发布”(而不是“调试”)编译并在 MSVS 之外运行它时,应用程序的行为如何?问:你是如何填充列表框的?
  • 当您的应用程序运行缓慢时,您的计算机在做什么?
  • 查看输出窗口。它是否充满了“第一次机会例外”消息?不要吞下异常,修复它们。
  • @paulsm4 C# 4.0,Winforms。在调试器之外,程序运行顺利。即时列表框人口。我还没有在发行版中编译过这个程序。我调用BeginUpdate(),然后添加我想要的所有元素,然后我调用EndUpdate()
  • @HansPassant 是的,我可以在输出窗口中看到很多System.InvalidCastExceptions。

标签: c# visual-studio-2010 visual-studio-debugging


【解决方案1】:

是的,我可以在输出窗口中看到很多 System.InvalidCastExceptions

这就是导致速度变慢的原因,调试器在处理异常时会做很多工作。尤其是您现在使用的远程调试器,因为您的项目的平台目标是 AnyCPU,所以需要将通知消息添加到输出窗口并不便宜。

你不能忽视这个问题,它不仅仅是一个调试器工件。 Debug + Exceptions,勾选 CLR Exceptions 的 Throw 框。抛出异常时,调试器现在将停止。您需要修复该代码。

【讨论】:

  • 啊,我发现了问题。在我的Equals 重载中,我尝试将对象转换为我的实体并捕获InvalidCastException 并返回false。我已经用as这个词重写了它,并检查对象是否为空,然后返回false。
  • 您并没有真正在 Equals 方法中编写 try/catch,是吗?啧啧啧。
【解决方案2】:

问题可能出在 VS2010 处理断点的方式上。看这个链接:

两个有趣的笔记:

  • 在调试开始时搜索符号通常很慢,特别是如果您配置了远程符号选项之一, 并且没有在不具有的各种 DLL 上设置“忽略” MS 服务器上的符号。

...

  • 是的,调试 64 位程序时将使用 msvsmon.exe。由于 Visual Studio 完全是 32 位的,因此需要远程调试器 弥合鸿沟。 ... 努力寻找并加载 .pdb 文件很可能。或者不小心进行了混合模式调试 选项已打开,因此调试器也可以看到所有非托管 DLL 加载并为它们查找符号。当然,这些只是猜测。

【讨论】:

  • PS:最后一句话来自 Hans Passant - 他也在回答这个问题。
【解决方案3】:

另一个导致速度变慢的原因 - 条件断点,因为需要在每次命中断点时评估条件。在长循环中设置条件为“假”的断点会显着减慢调试速度。

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 1970-01-01
    • 2011-03-22
    • 2023-04-08
    • 2017-06-29
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多