Welcher Overhead ist zur Laufzeit mit einer Erweiterungsmethode verbunden? (.NET) [duplizieren]

7

In einer Daten-Knirschen-Anwendung, die CPU- und / oder Speicherzugriffsgebunden ist, ist der Overhead einer Ein-Zeilen-Erweiterungsmethode bemerkbar? Ist es höher als ein normaler Funktionsaufruf, oder ist es einfach eine Compiler / IDE-Abstraktion? Zum Beispiel wäre die folgende Funktion schlecht beraten, wenn sie mehr als tausend Mal pro Sekunde aufgerufen würde:

%Vor%     
Matthew Scharley 18.09.2009, 06:31
quelle

2 Antworten

18

Es gibt keinen Overhead. Es ist nur eine statische Methode, die mit unterschiedlicher Syntax aufgerufen wird. Die IL generiert ist nur ein normaler Anruf.

Mit anderen Worten, der Aufwand für Ihre Erweiterungsmethode ist genau der gleiche für

%Vor%

als ob Sie gerade angerufen haben

%Vor%

... weil die generierte IL genau gleich ist.

In Bezug auf die Leistung ist "mehr als tausend Mal pro Sekunde" nichts . Der Overhead für eine zusätzliche Stack-Ebene wird auf dieser Ebene völlig unbedeutend sein ... selbst wenn die Methode nicht inline ist, was ich glaube, dass es in diesem Fall sehr wahrscheinlich ist.

Es gilt jedoch die normale Regel der Leistung: Es ist alles Rätselraten, bis Sie gemessen haben. Oder zumindest ist der tatsächliche Treffer in diesem Fall ein Rätselraten; die "Erweiterungsmethoden sind nur normale Methoden mit syntaktischem Zucker im Compiler" ist kein Rätselraten.

    
Jon Skeet 18.09.2009, 06:33
quelle
3
Es ist überhaupt kein Overhead, es ist nur ein syntaktischer Zucker, seine simple Compiler-Abstraktion.

    
Akash Kava 18.09.2009 06:34
quelle

Tags und Links