Anforderungen: Beim Blick auf den .NET-Quellcode habe ich festgestellt, dass einige Methoden die Funktion [MethodImpl(MethodImplOptions.AggressiveInlining)] hinzugefügt haben, aber ich habe gesehen, dass die MethodImpl-Funktion das Verhalten des JIT-Compilers beeinflussen kann. Einige Tests wurden auf Basis von Informationen aus dem Internet durchgeführt.
MethodImplOptions-Konfiguration
Code:
Inline-Funktion
In der Informatik ist eine Inline-Funktion (manchmal auch Online-Funktion oder Compile-Time-Expansionsfunktion genannt) ein Programmiersprachen-Konstrukt, das verwendet wird, um vorzuschlagen, dass der Compiler Inline-Erweiterungen (manchmal Online-Erweiterungen genannt) für bestimmte spezielle Funktionen Das bedeutet, dass der Compiler den angegebenen Funktionskörper anstelle jeder Stelle (des Kontexts), an der die Funktion aufgerufen wird, einfügt und ersetzt, wodurch die zusätzliche Zeit für jeden Aufruf der Funktion gespart wird. Bei der Verwendung von Inline-Funktionen ist es jedoch notwendig, den vom Programm belegten Speicherplatz und die Effizienz der Programmausführung abzuwägen, da zu viele komplexe Funktionen für die Inline-Erweiterung hohe Speicherressourcenkosten verursachen. Es ist auch wichtig zu beachten, dass Inline-Erweiterungen rekursiver Funktionen eine unendliche Kompilierung einiger Compiler verursachen können.
MethodImplOptions.AggressiveInlining
Funktion: Es wird empfohlen, dass der JIT-Compiler die Methode so weit wie möglich inlinet. Erklärung: Inline bezeichnet das Ersetzen eines Funktionsaufrufs durch den Funktionskörper selbst, wodurch der Overhead des Funktionsaufrufs reduziert wird. Anwendbare Szenarien: Geeignet für kleine, häufig genannte Methoden (z. B. Attribut-Accessoren, einfache mathematische Berechnungen usw.). Hinweis: Dies ist nur ein "Vorschlag", der JIT-Compiler kann je nach tatsächlicher Situation entscheiden, ob er tatsächlich inline oder nicht.
Die Ergebnisse des Tests "Inline" und "Nicht Inline" sind wie folgt:
Der Testcode ist wie folgt:
Es stellte sich heraus, dass die CPU-Auslastung nach Inline deutlich niedriger war als bei Nicht-Inline-Anrufen, tatsächlich auchSeien Sie nicht zu ängstlich, heutige Compiler sind sehr intelligent, selbst ohne diese Funktion kann der Compiler Ihnen helfen, automatisch zu optimieren。 |