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?
Antwort
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 ..
Wie über diese https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection.methodimplattributes?view=netframework-4.7.1
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int DoSomething()
{
return 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.
- 1. Können Async-Funktionen inline sein?
- 2. Wie behandelt der Delphi 2009-Compiler rekursive Inline-Methoden?
- 3. C++ 11 noexcept Qualifier und Inline-Methoden
- 4. Sollen meine C++ - Inline-Methoden explizit als Inline deklariert werden?
- 5. Können C++ - Konstruktoren Templates sein?
- 6. Umkehrende rekursive Java-Methoden
- 7. Django Inline-Formulare können nicht abfragen, muss Modell Instanz sein
- 8. Welche Inline-Elemente können in Tags enthalten sein?
- 9. Anonyme Methoden inline ausführen?
- 10. Statische Inline-Methoden?
- 11. Rückrufe in Aysncronous Rekursive Methoden?
- 12. Einfache rekursive Methoden in Java
- 13. Warum können Methoden in Enumerable ohne einen Methodenkörper sein?
- 14. Können C++ streambuf-Methoden Ausnahmen auslösen?
- 15. Können Methodenparameter in C# dynamisch sein
- 16. Welche C# -Datentypen können NULL-Typen sein?
- 17. Können C++ - Zuweisungsoperatoren freie Funktionen sein?
- 18. C# - Rekursive/Reflection-Eigenschaftswerte
- 19. Rekursive Backtracking in C++
- 20. Transform rekursive Methode in nicht rekursive C#
- 21. C# schreibgeschützte berechnete Eigenschaften, sollten sie Methoden sein?
- 22. Warum kann meine Vorlagenfunktion nicht inline sein
- 23. Können Generatoren rekursiv sein?
- 24. Statusaktualisierungen können asynchron sein
- 25. Können Unterabfrageergebnisse veraltet sein?
- 26. C++ Können beim Deklarieren eines Objekts virtuelle Methoden implementiert werden?
- 27. C# Rekursive Methode Parameter
- 28. Rekursive Methode Objective-C
- 29. C++ mehrere rekursive Funktionen
- 30. Rekursive Primzahl Funktion C++
Ist das wonach Sie suchen? https://blogs.msdn.microsoft.com/wesdyer/2007/02/02/anonymous-recursion-in-c/ –
@SudheeshSinganamalla Nein, ich interessiere mich für Inline-Methoden, nicht anonyme Methoden. – ArekBulski
Ist die eigentliche Frage "verbessert das die Leistung"? – enkryptor