对下面的程序真的很好奇(是的,在没有附加调试器的情况下在发布模式下运行),第一个循环为数组的每个元素分配一个新对象,并且运行大约需要一秒钟。
所以我想知道哪个部分花费的时间最多——对象创建或分配。因此,我创建了第二个循环来测试创建对象所需的时间,并创建了第三个循环来测试分配时间,两者都在几毫秒内运行。这是怎么回事?
static class Program
{
const int Count = 10000000;
static void Main()
{
var objects = new object[Count];
var sw = new Stopwatch();
sw.Restart();
for (var i = 0; i < Count; i++)
{
objects[i] = new object();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); // ~800 ms
sw.Restart();
object o = null;
for (var i = 0; i < Count; i++)
{
o = new object();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); // ~ 40 ms
sw.Restart();
for (var i = 0; i < Count; i++)
{
objects[i] = o;
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); // ~ 50 ms
}
}