2012-05-24 96 views
0

在VS2010中进行调试时,程序自然运行速度比其他方式慢很多。Visual Studio 2010在调试时填充ListBox时速度非常慢

但是,如果我更新ListBox的值,最近我的程序运行速度难以形容。 (其他控件也可能会受到影响,我不确定...但ListBox是一件确定的事情)。

在调试器之外的小部分时间内发生的操作(如向列表框中添加100个元素)可能需要长达3到5分钟的时间。

显然,这不是正常的行为。

我不确定这是什么时候开始的,但它一直没有发生。它在几个月前开始发生。也许当我安装服务包?我不确定。

当我看着进程时,msvsmon.exe正在咀嚼CPU。

任何想法,如果有一些选项,我可能已经改变这是什么原因造成的?我试图用一个包含8000个元素的ListBox调试某些东西,而这完全不可能。

的Windows 7 64位,4GB内存,VS2010 SP1的

+1

问:什么语言:C#? VB.Net?其他?问:目标是什么:Winforms? WPF?其他?问:当它不是从MSVS调试器运行时,应用程序的行为如何?问:当您为“发布”(而不是“调试”)编译并在MSVS之外运行时,应用程序的行为如何?问:你如何填充列表框? – paulsm4

+0

当您的应用程序运行缓慢时,您的计算机在做什么? –

+2

查看输出窗口。它是否充满了“第一次机会例外”消息?不要吞噬异常,修复它们。 –

回答

3

是的,我可以看到很多系统。InvalidCastExceptions在输出窗口中

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

你不能忽略这个问题,它不只是一个调试器工件。调试+异常,勾选抛出框为CLR异常。当抛出异常时,调试器现在停止。您需要修复该代码。

+0

啊,我发现了这个问题。在我的'Equals'重载中,我尝试将对象转换为我的实体并捕获'InvalidCastException'并返回false。我已经使用'as'单词重新编写它,并检查对象是否为空,然后返回false。 – Ozzah

+2

你没有真正写入等于方法中的try/catch,是吗? Tsk,tsk。 –

1

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

两个有趣的注解:

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

...

  • 是的,当您调试64位程序msvsmon.exe将被使用。由于Visual Studio完全是32位的,因此需要远程调试器来桥接分界线 。 ...大量地工作以查找并加载.pdb 文件将是可能的。或者不小心让混合模式调试 选项打开,所以调试器也会看到所有非托管DLL 加载并为它们查找符号。这些只是猜测当然。 slownes的
+0

PS:最后的报价来自Hans Passant--他也回答了这个问题。 – paulsm4

+0

我的代码中没有断点。 – Ozzah

0

还有一个原因 - 条件断点视病情需要评估每个命中断点。对于长循环内的条件而言,具有“假”的断点会显着减慢调试速度。

相关问题