【发布时间】:2014-03-20 13:19:54
【问题描述】:
我做了几个测试来测试属性和字段的访问时间。
我有这种测量方法:
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 中构建项目,结果如下:
我可以访问我决定测试的服务器机器,它是 Xeon E560 2.4 Ghz,在 Windows Server 2008 R2 上带有 2 个处理器,我得到了以下结果:
那么为什么我在更好的机器上有这么大的差异呢?是什么导致了这种差异?有什么想法吗?我可以想到不同的东西,但这只是建议,也许有人知道为什么?
【问题讨论】:
-
这两个系统并不完全是苹果对苹果。你说一个是服务器——它还在做什么?服务器是 32 位还是 64 位?笔记本电脑的 CPU 运行速度是否更快?它们是不同的 CPU(内核数量可能无关紧要)。
-
服务器是 64 位以及 Windows 7,我编译为仅以 x64 为目标。服务器为 2.4 GHz,笔记本电脑为 2.5 Ghz。我没想到这会影响对属性或字段的访问时间。几乎慢了两倍!
-
Xenon 是比 i5 更早一代的 CPU。这很可能会产生影响。其他潜在的区别是高速缓存的数量和总线速度。正如 RQDQ 所说,那里有很多变量。
-
我明白了,但没想到这速度慢了将近两倍,而且这是服务器,应该比笔记本电脑好,加油。我不是在和超旧的服务器比较。
-
@anderhil - 这还取决于您拥有的 i5 版本。 i5-4340M 最高可达 3.6 Ghz(比服务器快 1.5 倍)。
标签: c# windows performance reflection