不同CPU的测试结果差异

时间:2014-03-20 13:19:55

标签: c# windows performance reflection

我已经做了几项测试来测试属性和字段的访问时间。

我有这种测量方法:

  static void Measurer(Action act)
    {
        Stopwatch stop = Stopwatch.StartNew();
        for (int i = 0; i < 10000000; i++)
        {
            act.Invoke();    
        }

        stop.Stop();
        Console.WriteLine(stop.Elapsed);
    }

我有一些带有一些属性和字段的简单类,所以我有两个测试:

  Measurer(() =>
        {
            built1.LevelID = built.LevelID;
            built1.Enabled = built.Enabled;
            built1.Profile = built.Profile;
            built1.Modes = built.Modes;
        });

 Measurer(() =>
        {
            built1.levelID = built.levelID;
            built1.enabled = built.enabled;
            built1.profile = built.profile;
            built1.modes = built.modes;
        });

我也在测试不同的反射方法,但这里的测试只是为了显示差异。项目适用于4.5框架。 因此,当我使用Windows 7上的i5 CPU在笔记本电脑上运行时,我在Release x64中构建项目我有以下结果:

enter image description here

我可以访问我决定测试的服务器机器,它是Windows Server 2008 R2上带有2个处理器的Xeon E560 2.4 Ghz,我有这样的结果:

enter image description here

那么为什么我在更好的机器上有这么大的差异?是什么导致这种差异?有什么想法吗?我可以想到不同的事情,但这只是建议,也许有人知道为什么?

1 个答案:

答案 0 :(得分:1)

这里有许多变量,很难精确确定时间差异的来源。你的两个环境差别很大:

  • 不同的硬件(处理器,内存,主板等)
  • 操作系统的不同版本
  • 运行不同的软件/服务

此外,如果您通过远程桌面运行服务器版本,也会影响您的时间安排。

要从此测试中获得更多有用的数据,您必须控制更多变量(相同的操作系统,相同的软件配置等)。

编辑 - 远程桌面

关于为什么在远程桌面上执行此操作会影响时间的一些想法:

  • Console.Write操作可以阻止。见this question。你的测试编写方式,理论上不应该有太大差别,但我对整个实现堆栈知之甚少,以了解这种差异在你的情况下是否有意义。
  • Windows故意为远程桌面会话执行不同的操作。想到的项目与Windows窗体渲染有关,但可能存在其他差异。