in some perf critical program (single threaded), if I have arrays of primitive types, and need to access the same index of those more than once in loops.
Should I us
Lets test this:
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7};
int t = arr[3];
int a = 0;
var start = DateTime.UtcNow;
for (int i = 0; i < 1000000000; i++)
{
a += t;
}
Console.WriteLine(a);
Console.WriteLine(DateTime.UtcNow-start);
a = 0;
start = DateTime.UtcNow;
for (int i = 0; i < 1000000000; i++)
{
a += arr[3];
}
Console.WriteLine(a);
Console.WriteLine(DateTime.UtcNow - start);
Output:
-294967296
00:00:02.1925000
-294967296
00:00:03.4250000
Yes its slower to access the array repeatedly.
Array access always involves indirection, so if there are frequent accesses the variable will likely be faster.
That said, I find it incredibly unlikely that you will be able to measure the difference. This is an example of micro-optimization.
In general access to an array is slower than a temporary because it has 2 additional pieces of overhead
However I would not be changing any code I had today based on that knowledge unless a profiler clearly showed a tight loop to be a significant perf problem in my application. And furthermore showed that changing to a cached local produced a significant perf benefit.