与.NET 3.5相比,我在.NET 4中编译的应用程序似乎表现得非常慢。当我进行性能分析时,我发现VS2010 / .NET 4中的System.Math库已经大大减慢了。
对此有何解释?有没有其他人遇到这个或我是唯一一个看到这个?
更新:
我的示例代码如下所示:
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));
}
}
以上代码在框架3.5中需要0.55秒。在.NET 4中同样需要0.8秒。我在其他功能中看到的类似性能问题也包括Truncate,Floor和Max等。
谢谢, NIRANJAN
答案 0 :(得分:0)
我编写了一个小测试程序,用你的代码(稍加改动来加上Min的结果),这样JIT就不会优化代码的内存映像。我也使用/ o + flag为csc编译。我使用了我机器上的三个csc版本(2.0 / 3.5 / 4.0)。
结果:无重大差异。对于每个组件,在几次运行中都需要165-175毫秒。这些波动可能是因为系统中存在任何其他背景噪音,所以我不会依赖这样的微基准测试。
在你的系统中,我很确定即使为这样的微基准测试运行相同的程序集,你也会看到时间的波动。
维杰