У меня есть массив целых чисел, и я просматриваю их:
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/С++ обращаются напрямую, т.е. массив из n-элементов целых чисел имеет непрерывный блок памяти длины n * sizeof (int) и элемент доступа к программе i, делая что-то вроде * данных [i] = * data [0] + (i * sizeof (int)). (Пожалуйста, извините мое злоупотребление нотацией, но вы понимаете, что я имею в виду.)
Итак, это означает, что C/С++ не должен иметь прирост/потерю производительности для ссылки на переменные массива.
Как насчет С#? С# имеет кучу дополнительных служебных данных, таких как data.Length, data.IsSynchronized, data.GetLowerBound(), data.GetEnumerator().
Очевидно, что массив С# не совпадает с массивом C/С++.
Так какой вердикт? Должен ли я хранить int value = data [i] и работать со значением, или нет влияния на производительность?