4

我已经看到 C# 为访问一维数组“进行了优化”(不调用函数来访问元素),但对于 multidim-arrays 函数 GetValue 每次都会调用。为什么不每次未实现“正常”访问(指针移动+检查)或至少此函数未展平时调用此函数?

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

4

2 回答 2

1

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

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

于 2012-07-16T04:12:22.147 回答
1

我没有取消选中“抑制 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] 
于 2012-07-24T17:16:46.160 回答