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.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage