c# - 在 perf 关键代码中,我应该更喜欢 C# 中数组上的变量还是多个间接寻址?

标签 c# performance

在一些性能关键程序(单线程)中,如果我有基本类型的数组,并且需要在循环中多次访问相同的索引。

我应该使用 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/

相关文章:

c# - Azure.Data.Tables 仅查询下一条记录(限制/取 1?)

c# - DPI 未正确缩放

algorithm - MATLAB:快速计算Adamic-Adar Score

sql - 在 min_value 和 max_value oracle 之间生成数字

c# - 如何在特定时间每天在 C# 中调用一个方法?

C# ADO.NET - 返回表中一列的总和

python - matplotlib 非常慢。正常吗?

vim - 切换选项卡或导航行时,Ubuntu 中的 gVim 很慢

python - 将离散列映射到其唯一值的索引

c# - 从 Finalizer 调用托管资源安全吗? (如果我检查为空)