【问题标题】:Multidimensional array access performance in C#C# 中的多维数组访问性能
【发布时间】:2012-07-14 16:22:16
【问题描述】:

我已经看到 C#“优化”用于访问一维数组(不调用函数来访问元素),但对于多维数组函数 GetValue 每次调用。为什么不每次“正常”访问(指针移动+检查)没有实现或者至少这个函数没有被扁平化时调用这个函数?

我找不到合乎逻辑的原因。 (multidim-arrays 的性能不是很好)

【问题讨论】:

    标签: c# .net performance multidimensional-array


    【解决方案1】:

    我试过了,每个元素访问大约有 14 条指令,这是由于边界检查和维度大小的乘法。

    如果性能很重要,请使用固定指针的一维数组。

    【讨论】:

      【解决方案2】:

      我没有取消选中“抑制 JIT 优化...”因此函数调用 GetValue 没有被内联。

      优化代码:

      b = a[3, 5];
      00000026  mov         eax,3 
      0000002b  lea         edx,[eax+2] 
      0000002e  sub         eax,dword ptr [ecx+10h] 
      00000031  cmp         eax,dword ptr [ecx+8] 
      00000034  jae         0000010B 
      0000003a  sub         edx,dword ptr [ecx+14h] 
      0000003d  cmp         edx,dword ptr [ecx+0Ch] 
      00000040  jae         0000010B 
      00000046  imul        eax,dword ptr [ecx+0Ch] 
      0000004a  add         eax,edx 
      0000004c  mov         edi,dword ptr [ecx+eax*4+18h] 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 2020-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多