2010-06-18 161 views
0

與.NET 3.5相比,我在.NET 4中編譯的應用程序的執行速度似乎非常慢。當我進行性能分析時,我發現VS2010/.NET 4中的System.Math庫已經顯着減慢。.NET4/VS2010中System.Math庫的性能下降

對此有何解釋?有沒有其他人遇到過這個問題,還是我唯一看到這個的?

UPDATE:

我的示例代碼看起來是這樣的:

for (int i = 0; i < 10; i++) 
    { 
     for (int j = 0; j < 1000000; j++) 
     { 
      Min((double) ((j + 1)/2), (double) ((j + 2)/2)); 
     } 
     for (int k = 0; k < 1000000; k++) 
     { 
      Min((double) ((k + 2)/2), (double) ((k + 3)/2)); 
     } 
     for (int m = 0; m < 1000000; m++) 
     { 
      Min((double) ((m + 3)/2), (double) ((m + 4)/2)); 
     } 
     for (int n = 0; n < 1000000; n++) 
     { 
      Min((double) ((n + 4)/2), (double) ((n + 5)/2)); 
     } 
    } 

上述代碼發生0.55秒在框架3.5。在.NET 4中,這同樣需要0.8秒。我在其他函數中也看到類似的性能問題,例如Truncate,Floor和Max等。

感謝, NIRANJAN

+1

請顯示真實的數字,請指出它有趣的特定功能來分析。 – Restuta 2010-06-18 08:50:55

+1

你在打什麼方法?用什麼輸入?你如何計時? – 2010-06-18 08:56:49

+0

您的真實應用程序是否在循環中執行了4千萬次基本的數學運算? – 2010-06-18 14:22:05

回答

0

我寫了一個小測試程序,把你的代碼(有小的改動加起來最少的結果),使JIT不優化代碼的內存映像。另外我編譯使用/ o +國旗爲csc。我使用了我的機器上的所有csc三個版本(2.0/3.5/4.0)。

結果:無重大差異。每個組件在幾次運行中都花費了165-175毫秒。這些波動可能是因爲系統中的任何其他背景噪音,所以我不會依賴這樣的微基準。

在你的系統中,我確信你會看到時間的波動,即使是像這樣的微基準測試運行相同的程序集。

Vijay