我已经做了几项测试来测试属性和字段的访问时间。
我有这种测量方法:
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中构建项目我有以下结果:
我可以访问我决定测试的服务器机器,它是Windows Server 2008 R2上带有2个处理器的Xeon E560 2.4 Ghz,我有这样的结果:
那么为什么我在更好的机器上有这么大的差异?是什么导致这种差异?有什么想法吗?我可以想到不同的事情,但这只是建议,也许有人知道为什么?
答案 0 :(得分:1)
这里有许多变量,很难精确确定时间差异的来源。你的两个环境差别很大:
此外,如果您通过远程桌面运行服务器版本,也会影响您的时间安排。
要从此测试中获得更多有用的数据,您必须控制更多变量(相同的操作系统,相同的软件配置等)。
编辑 - 远程桌面
关于为什么在远程桌面上执行此操作会影响时间的一些想法: