JIT weigert sich, winzige Methoden einzubinden
Ich vermisse ernsthafte Optimierungen, weil die JIT nicht viele meiner Methoden integriert.
Zum Beispiel haben wir den folgenden Code:
static void Main(string[] args)
{
IsControl('\0');
}
public static bool IsControl(char c)
{
return ((c >= 0 && c <= 31) || (c >= 127 && c <= 159));
}
Erzeugt nach der JIT-Kompilierung Folgendes:
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
Beachten Sie, dass0000001f
Hier setze ich den Haltepunkt. Wie Sie sehen, gibt es einen Anruf bei00000021
, das ist absolut falsch. Warum sollte eine so kleine Methode nicht für Inlining geeignet sein? Für den Hinweis wurde dies mit Optimierung am kompiliert.