我正在测试我的代码以查看for和foreach循环之间的性能差异(想看看它是如何因为好奇而影响我的程序),并且在测量滴答声时,我注意到会有零星的跳跃在for循环中列表为空时所花费的时间。
例如,控制台窗口中的某些输出显示为[...],2,4,4,2,5,4,2, 26 ,3,1, 27 ,2,2,1,3,2,2,[...]。
虽然我意识到这么小的时间间隔测量的这些滴答对于我的应用程序的最终性能是疏忽的,但我很好奇为什么会有这样的跳跃。同样,这些数字是在我知道列表为空的时候拍摄的,所以没有什么可以实际迭代。
循环中的对象是字典;具体来说,他们为其值设置了密钥和自定义类。
Stopwatch.Frequency给了我2533211(自从我进行了之前的测量后,我没有必要重新启动系统)。
代码 -
public void Update(int gameTime)
{
watch.Restart();
for (int i = 0; i < _movementComponents.Count; ++i)
{
_positionComponents[i].Position += _movementComponents[i].Velocity * gameTime;
_movementComponents[i].Velocity = Vector2.Zero;
}
watch.Stop();
Console.WriteLine("Loop took " + watch.ElapsedTicks + " ticks");
}
答案 0 :(得分:1)
我做了一个空循环的实验。在那里也发现了相同的随机延迟。以下是我能想到的几个原因: