Frage

Was ist inlining?

Was ist es verwendet?

Können Sie inline etwas in C #?

War es hilfreich?

Lösung

Was ist

In den Bedingungen von C und C ++ Sie das Inline-Schlüsselwort verwenden, den Compiler zu anweisen, eine Routine ohne den Overhead nennen von Parametern auf den Stapel schieben. Die Funktion stattdessen hat es den Code Maschine in die Funktion eingeführt, wo er aufgerufen wurde. Dies kann eine deutliche Leistungssteigerung in bestimmten Szenarien erstellen.

Gefahren

Die Geschwindigkeitsvorteile in „inlining“ Rückgang deutlich, wie die Größe der Inline-Funktion erhöht werden. Übermäßiger Gebrauch kann ein Programm tatsächlich dazu führen, langsamer zu laufen. eine sehr kleine Accessorfunktion inlining wird in der Regel Codegröße verringern, während eine sehr große Funktion inlining dramatisch Codegröße erhöhen.

Inlining in C #

In C geschieht # inlining an der JIT-Ebene, in der die JIT-Compiler die Entscheidung treffen. Jetzt gibt es keinen Mechanismus in C #, die Sie dies explizit tun können. Wenn Sie wissen wollen, was der JIT-Compiler tut, dann können Sie anrufen: System.Reflection.MethodBase.GetCurrentMethod().Name zur Laufzeit. Wenn die Methode inlined wird es stattdessen den Namen des Anrufers angezeigt werden kann.

In C # können Sie keine Methode erzwingen Inline aber Sie können eine Methode nicht zwingen. Wenn Sie wirklich benötigen Zugriff auf einen bestimmten Aufrufliste, und Sie müssen entfernen inlining können Sie: MethodImplAttribute mit MethodImplOptions.NoInlining. Außerdem, wenn eine Methode wird als virtuelle deklariert, dann wird es auch nicht von der JIT inlined werden. Der Grund dafür ist, dass das endgültige Ziel des Aufrufs ist nicht bekannt.

Mehr auf inlining

Andere Tipps

Zur Definition und Diskussion von inlining, sehen diese Frage .

In C # Sie brauchen nicht den Compiler oder Laufzeit zu instruieren, Inline, da die Laufzeit automatisch tun wird.

P. S. Diese Antwort ist auch richtig für Java.

Inlining ist, wenn stattdessen eine bestimmte Funktion aufzurufen, wird der Inhalt der Funktion direkt an der Aufrufstelle erfolgen. Der Hauptgrund dafür besteht darin, dass es den Aufwand für das Aufrufen einer Funktion entfernt, indem die Funktion Inhalte im callsite läuft.

Es wird als eine Optimierungstechnik verwendet. Im Fall von C #, es hängt wirklich von dem CLR JIT-Engine, die Arbeit zu tun. Zur Laufzeit, wenn eine Methode kompiliert, wird der JIT-Engine eine Heuristik verwenden, um festzustellen, ob eine Funktion inline geeignet ist, und wird eine effictive Optimierung sein. Wenn ja, wird ein Inline ausgeführt.

Vance hat einen großen Artikel auf, was der JIT hält, wenn inlining: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to- Inline-that-is-the-question.aspx

Es gibt keine Möglichkeit, einen Inline in C # zu zwingen. Die Sprache ist nicht dieses Konstrukt unterstützen. Vor allem, weil die Menschen sind sehr arm Richter von dem, was optimiert werden soll. Die JITer ist ein viel besserer Richter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top