Действительно любопытно для нижеприведенной программы (да запустите в режиме деблокирования без прикрепленного отладчика), первый цикл назначает новый объект каждому элементу массива и занимает около секунды для запуска.
Поэтому мне было интересно, какая часть занимает больше всего времени - создание или назначение объекта. Поэтому я создал второй цикл, чтобы проверить время, необходимое для создания объектов, и третий цикл для проверки времени назначения, и оба выполняются всего за несколько миллисекунд. Что происходит?
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
}
}