2017-12-10 3 views
-2

Angenommen, ich habe eine rekursive Methode oder eine statische Methode. Kann es für die Leistung inline sein? Es würde wahrscheinlich einen einzeiligen, bedingten Operator enthalten.Können C# rekursive Methoden inline sein?

+0

Ist das wonach Sie suchen? https://blogs.msdn.microsoft.com/wesdyer/2007/02/02/anonymous-recursion-in-c/ –

+0

@SudheeshSinganamalla Nein, ich interessiere mich für Inline-Methoden, nicht anonyme Methoden. – ArekBulski

+1

Ist die eigentliche Frage "verbessert das die Leistung"? – enkryptor

Antwort

0

Es hängt davon ab, was die fucntion tut ..

Wenn es Factorial: (5!) == 5 * 4 * 3 * 2 * 1 Sie es auf folgende Weise schreiben:

private static int Factorial(int v) 
     { 
      if (v == 1) 
       return v; 
      return v * Factorial(v - 1); 
     } 

OR:

private static int Factorial2(int v) 
    { 
     int i = 1; 
     int accum = 1; 
     while (i++ < v) 
      accum *= i; 
     return accum; 
    } 

ABER - ich bin sicher, dass nicht alle Funktionen wie, dass man übertragbar sind. Für die Leistung nimmt die erste 3 Milli, mit n = 80, und die zweite nahm 0 Milli ... Also ja - es gibt einen Vorteil, wie Sie angenommen haben.

EDIT: Ich sah, dass Sie jetzt ein Tag von "Tail Recruption" platziert, die, wenn Sie auf dem Tag schweben - Ihnen die Antwort sagt. Ja Compiler weiß, wie diese Rekursion refered zu einem „inline“ .My ​​Zeittest zu machen, um „debug“ Modus .. soll auch in Release testen ..

0

Auch wenn Sie möchten, dass der Compiler Ihre Methode inline einfügt. Nicht alle Methoden können inline sein. In diesem Fall kann die rekursive Methode keine Inline-Methode sein, da sie sich selbst aufrufen muss.

AggressiveInlining
Gibt an, dass das Verfahren, wo immer möglich inlined werden soll.

Inlining ersetzt den Methodenaufruf durch den Methodeninhalt, sodass rekursive Methoden nicht inline ausgeführt werden können.

Verwandte Themen