.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
答
我写了一个小测试程序,把你的代码(有小的改动加起来最少的结果),使JIT不优化代码的内存映像。另外我编译使用/ o +国旗为csc。我使用了我的机器上的所有csc三个版本(2.0/3.5/4.0)。
结果:无重大差异。每个组件在几次运行中都花费了165-175毫秒。这些波动可能是因为系统中的任何其他背景噪音,所以我不会依赖这样的微基准。
在你的系统中,我确信你会看到时间的波动,即使是像这样的微基准测试运行相同的程序集。
Vijay
请显示真实的数字,请指出它有趣的特定功能来分析。 – Restuta 2010-06-18 08:50:55
你在打什么方法?用什么输入?你如何计时? – 2010-06-18 08:56:49
您的真实应用程序是否在循环中执行了4千万次基本的数学运算? – 2010-06-18 14:22:05