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

时间:2010-06-18 08:48:49

标签: .net performance .net-3.5 .net-4.0 visual-studio-2010

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

1 个答案:

答案 0 :(得分:0)

我编写了一个小测试程序,用你的代码(稍加改动来加上Min的结果),这样JIT就不会优化代码的内存映像。我也使用/ o + flag为csc编译。我使用了我机器上的三个csc版本(2.0 / 3.5 / 4.0)。

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

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

维杰