Я думаю, что производительность будет очень похожа.
Служебная нагрузка, которая возникает при использовании List против Array, - IMHO, когда вы добавляете элементы в список, и когда список должен увеличивать размер используемого им массива, когда достигается емкость массива.
Предположим, у вас есть список с вместимостью 10, тогда список увеличит его емкость, как только вы захотите добавить 11-й элемент.
Вы можете уменьшить влияние на производительность, инициализируя Емкость списка равным количеству элементов, которые он будет содержать.
Но для того, чтобы выяснить, является ли итерация по списку такой же быстрой, как итерация по массиву, почему бы вам не провести сравнительный анализ?
int numberOfElements = 6000000;
List<int> theList = new List<int> (numberOfElements);
int[] theArray = new int[numberOfElements];
for( int i = 0; i < numberOfElements; i++ )
{
theList.Add (i);
theArray[i] = i;
}
Stopwatch chrono = new Stopwatch ();
chrono.Start ();
int j;
for( int i = 0; i < numberOfElements; i++ )
{
j = theList[i];
}
chrono.Stop ();
Console.WriteLine (String.Format("iterating the List took {0} msec", chrono.ElapsedMilliseconds));
chrono.Reset();
chrono.Start();
for( int i = 0; i < numberOfElements; i++ )
{
j = theArray[i];
}
chrono.Stop ();
Console.WriteLine (String.Format("iterating the array took {0} msec", chrono.ElapsedMilliseconds));
Console.ReadLine();
в моей системе; перебор массива занял 33 мсек; перебор списка занял 66 мсек.
Если честно, я не ожидал, что вариация будет такой большой.
Итак, я поместил свою итерацию в цикл: теперь я выполняю обе итерации 1000 раз.
Результаты:
повторение списка заняло 67146 мс
итерация массива заняла 40821 мсек
Теперь, вариация уже не так велика, но все же ...
Поэтому я запустил .NET Reflector, и получатель индексатора класса List выглядит следующим образом:
public T get_Item(int index)
{
if (index >= this._size)
{
ThrowHelper.ThrowArgumentOutOfRangeException();
}
return this._items[index];
}
Как вы можете видеть, когда вы используете индексатор List, List выполняет проверку, не выходите ли вы за пределы внутреннего массива. Эта дополнительная проверка поставляется с оплатой.