O JIT se recusa a incorporar métodos minúsculos
Estou perdendo otimizações sérias porque o JIT não incorporará muitos dos meus métodos.
Por exemplo, vamos ter o seguinte código:
static void Main(string[] args)
{
IsControl('\0');
}
public static bool IsControl(char c)
{
return ((c >= 0 && c <= 31) || (c >= 127 && c <= 159));
}
Produz o seguinte após a compilação JIT:
0000001f xor ecx,ecx
00000021 call FFFFFFFFFFEC9760
00000026 mov byte ptr [rsp+20h],al
0000002a nop
0000002b jmp 000000000000002D
0000002d add rsp,38h
00000031 rep ret
Observe que0000001f
é onde eu defino o ponto de interrupção. Como você pode ver, há uma chamada em00000021
, isso é absolutamente errado. Por que um método tão minúsculo não seria qualificado para embutir? Para a nota, isso foi compilado com otimização ativada.