Я не думаю, что вам нужно беспокоиться о возможном влиянии на производительность из-за преобразования.Достаточно взглянуть на машинный код, сгенерированный JIT, они идентичны как для int
, так и для индекса long
:
x86, режим разблокировки, int
index:
var val = arr[idx];
00000059 cmp ebx,dword ptr [edx+4]
0000005c jae 00000078
0000005e mov esi,dword ptr [edx+ebx*4+8]
x86, режим выпуска, приведенный long
индекс:
var val = arr[(int)idx];
0000005f cmp ebx,dword ptr [edx+4]
00000062 jae 00000081
00000064 mov esi,dword ptr [edx+ebx*4+8]
x64, режим выпуска, int
индекс:
var val = arr[idx];
00000060 movsxd rcx,ebx
00000063 mov rax,qword ptr [rdi+8]
00000067 cmp rcx,3
0000006b jae 0000000000000080
0000006d mov ecx,dword ptr [rdi+rcx*4+10h]
x64, выпускmode, long
index:
var val = arr[(int)idx];
00000061 movsxd rcx,ebx
00000064 mov rax,qword ptr [rdi+8]
00000068 cmp rcx,3
0000006c jae 0000000000000080
0000006e mov ecx,dword ptr [rdi+rcx*4+10h]
Как отметил Даниэль Геригер, инструкцию conv.i4 IL не нужно учитывать в машинном коде, 32 MSB просто отбрасываются.