我已经看到 C# 为访问一维数组“进行了优化”(不调用函数来访问元素),但对于 multidim-arrays 函数 GetValue 每次都会调用。为什么不每次未实现“正常”访问(指针移动+检查)或至少此函数未展平时调用此函数?
我找不到合乎逻辑的原因。(multidim-arrays 的性能不是很好)
我已经看到 C# 为访问一维数组“进行了优化”(不调用函数来访问元素),但对于 multidim-arrays 函数 GetValue 每次都会调用。为什么不每次未实现“正常”访问(指针移动+检查)或至少此函数未展平时调用此函数?
我找不到合乎逻辑的原因。(multidim-arrays 的性能不是很好)
我试了一下,每个元素访问大约有 14 条指令,这是由于边界检查和尺寸大小的乘法。
如果性能很重要,请使用固定到指针的一维数组。
我没有取消选中“抑制 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]