也不知道博主从哪里抄写来的,分享一下,又加了自己的思考和扩展,一个有趣的写法。看了后,你也许会大惊一跳。
先上菜
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//Stopwatch stopwatch = new Stopwatch();
//stopwatch.Start();
//int[,] arr = new int[10240, 10240];
//for (int m = 0; m < 10240; m++)
//{
// for (int n = 0; n < 10240; n++)
// {
// arr[m, n] = 1234; //先外后内
// }
//}
//stopwatch.Stop();
//var a = stopwatch.ElapsedMilliseconds;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
int[,] arr = new int[10240, 10240];
int x, y;
for (int m = 0; m < 10240; m++)
{
for (int n = 0; n < 10240; n++)
{
arr[n, m] = 1234; //先内后外
}
}
stopwatch.Stop();
var a = stopwatch.ElapsedMilliseconds;
}
本案例使用的WPF测试
上面这段代码,我们分别执行2次,看看运行的时间
第一次
先m后n
可见运行后,运行这段代码的时间是:344,当然这个值和计算机的CPU等等都有关系的,大概就在这个区间左右,相差不会很大。
第二次
先n后m
可见运行后,运行这段代码的时间是:1327,当然这个值和计算机的CPU等等都有关系的,大概就在这个区间左右,相差不会很大。
1327/344≈4,也就是说,2种写法相差4倍的运行效率。
再看我把案例扩大一下,把二维数据扩大进行比较
先上菜
16657/4364≈ 4
本次结果依然是4,这里要说明一下,虽然m和n的数值不一样,但是总体循环的乘积是一样的。
然后我们看看三维数据的数据
第一次:5138
第二次:13606
第三次:26308
递增的关系基本上是2倍的关系, 但是第一次和第三次,是5倍的的关系。
底层机制我们不做分析了,都是计算机底层的背景知识。
有一个快速的记忆方法,俗话说,攘外必先安内。其中,按照字的顺序记就可以了,先外后内即可,快去优化你的代码性能吧。
来源: