C # Delegieren Compiler-Optimierung

8

Ich habe angefangen, anonyme Delegierte viel in C # zu verwenden, und ich habe mich gefragt, wie effizient der Compiler oder die Laufzeit sie aus dem Code entfernt, der tatsächlich ausgeführt wird, und ich habe das nirgendwo detaillierter gesehen?

>

Ist es überhaupt schlau genug, sie zu inline einzubinden und rekursive Verwendungen, die statisch abgeleitet werden könnten, zu reduzieren?

    
iam 02.06.2010, 14:02
quelle

3 Antworten

3

Nein, der C # -Compiler optimiert einen Lambda-Ausdruck nicht in Inline-Code. Anonyme Delegaten und Lambda-Ausdrücke erzeugen immer einen entsprechenden Delegaten oder einen Ausdrucksbaum. Dies wird in Abschnitt 6.5 der C # -Sprachspezifikation behandelt.

  

Ein anonymer Methodenausdruck oder Lambda-Ausdruck wird als anonyme Funktion klassifiziert (§7.14). Der Ausdruck hat keinen Typ, kann aber implizit in einen kompatiblen Delegattyp oder Ausdrucksbaumentyp konvertiert werden.

In bestimmten Fällen wird das Lambda zwischengespeichert und nicht für zukünftige Verwendung wiederhergestellt. Aber es wird nicht inline sein.

    
JaredPar 02.06.2010, 14:20
quelle
2

In den meisten Fällen, nein, ist es nicht.

Wenn Sie jedoch keine tatsächlichen Leistungsprobleme bemerken und sie in einem Profiler ausfindig gemacht haben, sollten Sie sich keine Gedanken darüber machen.

    
SLaks 02.06.2010 14:04
quelle
2

Der C # -Compiler wird sie niemals optimieren. Allerdings könnte der .NET JIT Compiler, wenn sie einfach genug sind.

    
Blindy 02.06.2010 14:06
quelle