У меня есть массив целых чисел, и я просматриваю их в цикле:
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] и работать со значением, или это не влияет на производительность?