MethodBase.GetCurrentMethod () Leistung?

8

Ich habe eine Log-Klasse und eine Funktion wie im folgenden Code geschrieben:

%Vor%

Jedes Mal, wenn ich etwas protokolliere, protokolliere ich auch den Klassennamen aus methodBase.Name und methodBase.DeclaringType.Name.

Ich lese den folgenden Beitrag Verwendung Get CurrentMethod und ich bemerkte dass diese Methode langsam ist.

Soll ich this.GetType () anstelle von System.Reflection.MethodBase verwenden oder den Namen der Klasse / Methode manuell in mein Protokoll schreiben, z. Log ("ClassName.MethodName", "log message)? Was ist die beste Vorgehensweise?

    
Ioannis 03.02.2011, 11:33
quelle

2 Antworten

9

Es kommt wirklich darauf an.

Wenn Sie den this.GetType() -Ansatz verwenden, werden Sie die Methodeninformationen verlieren, aber Sie werden einen großen Leistungszuwachs haben (anscheinend ein Faktor von 1200, entsprechend Ihrem Link).

Wenn Sie eine Schnittstelle anbieten, mit der der Aufrufer Strings ausgeben kann (zB Log("ClassName.MethodName", "log message") , erhalten Sie wahrscheinlich eine noch bessere Performance, aber das macht Ihre API weniger freundlich (der aufrufende Entwickler muss den Klassen- und Methodennamen angeben).

    
Edwin de Koning 03.02.2011, 12:46
quelle
2

Ich weiß, dass dies eine alte Frage ist, aber ich dachte mir, ich würde eine einfache Lösung auswerfen, die gut zu funktionieren scheint und Symbole beibehält

%Vor%

Das Ausführen dieses Codes gibt mir folgende Ergebnisse:

%Vor%

Für eine Million Iterationen ist das überhaupt nicht schlecht , besonders im Vergleich zur direkten Reflexion. Die Methodengruppe wird in einen Delegate-Typ umgewandelt. Sie behalten einen symbolischen Link bis zur Protokollierung bei. Keine doofen magischen Saiten.

    
Xaiter 20.06.2013 16:54
quelle