В C #: медленнее ли ссылаться на переменную массива?

У меня есть массив целых чисел, и я просматриваю их в цикле:

for (int i = 0; i < data.Length; i++)
{
  // do a lot of stuff here using data[i]
}

Если да:

for (int i = 0; i < data.Length; i++)
{
  int value = data[i];
  // do a lot of stuff with value instead of data[i]
}

Есть ли прирост / потеря производительности?

Насколько я понимаю, C / Доступ к элементам массива C ++ осуществляется напрямую, т. Е. Массив из n элементов целых чисел имеет непрерывный блок памяти длиной n * sizeof (int), а программный доступ к элементу i выполняется с помощью чего-то вроде * data [i] = * data [0] + (я * размер (целое)). (Прошу извинить меня за злоупотребление нотацией, но вы понимаете, что я имею в виду.)

Это означает, что в C / C ++ не должно быть увеличения / уменьшения производительности при обращении к переменным массива.

А как насчет C #? В C # есть множество дополнительных накладных расходов, таких как data.Length, data.IsSynchronized, data.GetLowerBound (), data.GetEnumerator ().

Очевидно, что массив C # не то же самое, что массив C / C ++.

Так какой вердикт? Следует ли хранить int value = data [i] и работать со значением, или это не влияет на производительность?

19
задан John Saunders 7 April 2011 в 02:13
поделиться