在一些性能关键程序(单线程)中,如果我有基本类型的数组,并且需要在循环中多次访问相同的索引。
我应该使用 tmp 变量,还是只在数组上使用常量间接寻址会更好/更快?
我也可以想象,两者可能相同/在编译时透明优化。
最佳答案
让我们测试一下:
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);
输出:
-294967296
00:00:02.1925000
-294967296
00:00:03.4250000
是的,重复访问数组会比较慢。
关于c# - 在 perf 关键代码中,我应该更喜欢 C# 中数组上的变量还是多个间接寻址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380676/