为什么使用内联初始化创建数组会如此慢?
为什么使用内联初始化创建数组会如此慢?
为什么内联数组初始化比迭代初始化慢得多?我运行了这个程序进行比较,单个初始化所花费的时间比使用for循环初始化要长得多。
以下是我在LinqPad中编写的用于测试的程序。
var iterations = 100000000; var length = 4; { var timer = System.Diagnostics.Stopwatch.StartNew(); for(int i = 0; i < iterations; i++){ var arr = new int[] { 1, 2, 3, 4 }; } timer.Stop(); "Array- Single Init".Dump(); timer.Elapsed.Dump(); } { var timer = System.Diagnostics.Stopwatch.StartNew(); for(int i = 0; i < iterations; i++){ var arr = new int[length]; for(int j = 0; j < length; j++){ arr[j] = j; } } timer.Stop(); "Array- Iterative".Dump(); timer.Elapsed.Dump(); }
结果:
Array - Single Init 00:00:26.9590931 Array - Iterative 00:00:02.0345341
我还在VS2013 Community Edition和最新的VS2015 preview上的另一台计算机上运行了此代码,并得到与我的LinqPad结果类似的结果。
我在Release模式下运行了这段代码(即:启用编译器优化),得到了与上面非常不同的结果。这似乎表明这是一个编译器优化问题。
Array - Single Init 00:00:00.5511516 Array - Iterative 00:00:00.5882975