为什么使用内联初始化创建数组会如此慢?

35 浏览
0 Comments

为什么使用内联初始化创建数组会如此慢?

为什么内联数组初始化比迭代初始化慢得多?我运行了这个程序进行比较,单个初始化所花费的时间比使用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

0