有一项任务要知道哪些代码更快以及原因:
//A
Stopwatch sw = new Stopwatch();
Int32[] a = new Int32[10000000];
int len = a.Length;
sw.Start();
//for (Int32 index = 0; index < len; index++)
//{
// a[index] = 6;
//}
//sw.Stop();
//B
for (Int32 index = 0; index < a.Length; index++)
{
a[index] = 6;
}
sw.Stop();
var time = sw.ElapsedMilliseconds;
方法B的平均时间比A强更多。有人解释原因吗?
答案 0 :(得分:0)
在情况B中,每次循环时,运行时调用代码来获取数组的长度。
在A中,这样做一次并保存结果。
我一直认为运行时会优化该循环,它们会是相同的。您的结果有显着差异吗?您是否经过了几次测试才能发现它始终不同?
答案 1 :(得分:0)
我的猜测是因为每次循环时轮询数组的长度,而A方法只需要检查长度的缓存值。所以,最终,这归结为caching
的想法