2009-08-31 67 views
2

我一直令人頭大我的腦袋,試圖找出究竟發生了什麼事情與最近的(非測試版)的Visual Studio 2008 SP1:Visual Studio 2008 SP1引入了運行時錯誤還是我瘋了?

我使用OpenMP內置的應用程序運行在調試器慢得令人難以置信,使CPU使用率達到100%。當它們在調試器外部運行時,它只是運行緩慢(對於發佈版本)。

使用英特爾線程構建模塊庫或我自己的線程團隊實現構建的應用程序在調試器中運行速度比在調試器外部運行時要慢(對於發佈版本)。

當我去另一臺沒有安裝SP1的開發機器時,情況就不一樣了。在調試器或外部運行對程序性能沒有影響。 OpenMP加速我的應用程序,就像線程構建模塊或我自己的線程團隊代碼一樣(爲了解決這個問題而急匆匆地寫出來)。

這是完全不會對應用程序進行任何更改,只需在調試器SP1或常規Visual Studio內部或外部運行即可。

我在谷歌上沒有發現任何關於此事的信息,所以我堅持不懈地說出一些話,希望別人可能會認識到這一點正在發生在他們身上。要麼,要麼是我看到的東西。

+0

您是否嘗試過使用性能分析器得到什麼方法是最消耗時間的想法?這可能會給你提示底層問題是什麼。 – bobbymcr 2009-08-31 00:43:51

+0

我已經使用了分析器。但是剖析器不附加調試器,所以應用程序的行爲不同。多線程版本的配置文件輸出看起來與常規版本相同。出現了相同的熱點 - 我已經儘可能地在優化方面做了很多工作。 – 2009-08-31 18:24:09

回答

2

是的。在某些情況下。切換到SP1後,我們遇到了極其緩慢的類似情況。造成這種情況的原因是例外。我們有一個數據模型是由大量使用試圖訪問在字典中鍵的模式的,有它失敗,並捕捉異常:

try { 
    var a = dict[key]; 
} catch(KeyNotFoundException) { 
    dict[key] = default; 
    a = default; 
} 

這只是一個例子,但原因是任何異常在所有。無論出於何種原因,僅在調試器中,VS非常緩慢。請注意,這是以前的情況,但是新補丁更糟糕。

解決方案是簡單地總是使用測試。對於上面的字典例子,使用.TryGet或者在自定義代碼中檢查你的調用在調用它之前是否會產生一個異常,如果它會發生很多事情(因此是一個'預期'事物,而不是'特殊'事物) 。

更多信息:Exceptions and Performance

相關問題