.NET4/VS2010中System.Math库的性能下降

问题描述:

与.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

我写了一个小测试程序,把你的代码(有小的改动加起来最少的结果),使JIT不优化代码的内存映像。另外我编译使用/ o +国旗为csc。我使用了我的机器上的所有csc三个版本(2.0/3.5/4.0)。

结果:无重大差异。每个组件在几次运行中都花费了165-175毫秒。这些波动可能是因为系统中的任何其他背景噪音,所以我不会依赖这样的微基准。

在你的系统中,我确信你会看到时间的波动,即使是像这样的微基准测试运行相同的程序集。

Vijay