2012-05-24 95 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

還有一個原因 - 條件斷點視病情需要評估每個命中斷點。對於長循環內的條件而言,具有「假」的斷點會顯着減慢調試速度。

相關問題