2009-08-12 4 views
4

Ich habe eine große C# -App mit vielen Methoden in vielen Klassen geschrieben.Eigene Laufzeitanalyse Ihres Codes in C#

Ich versuche zu protokollieren, was wie oft während meiner Entwicklung aufgerufen wird. (Ich halte einen Datensatz in einer DB)

Jede Methode mit den folgenden Anrufe gepolstert ist:

void myMethod() 
{ 
log(entering,args[]); 

log(exiting,args[]); 
} 

Da ich dies für alle meine Methoden tun wollen, gibt es einen besseren Weg, dies zu tun, dann mit um diese Codezeilen in jeder Methode zu replizieren?

Antwort

5

Werfen Sie einen Blick auf http://www.postsharp.org/

Hier ist das erste Beispiel auf ihrer Titelseite:

public class TraceAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Entering {0}.", eventArgs.Method); } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Leaving {0}.", eventArgs.Method); } 
} 

Scheint genau das zu sein, was du brauchst!

+0

Oh wow! das ist großartig! Vielen Dank. – Matt

1

Nun, Sie könnten eine Art von Decorator in Ihren Klassen verwenden, um Dinge zu protokollieren, aber ich denke, der bessere Ansatz ist die Verwendung einer Art Profiling-Tool in Ihrem Build und/oder Komponententestprozess. Sie können ziemlich leicht viel Wert aus einigen einfachen metrischen Sammlung in CruiseControl- bekommen usw.

1

Sie benötigen einen Profiler. Es gibt zwei "Haupt" für C#. JetBrains "dotTrace" und "YourKit" sind beide gut, aber ich bevorzuge YourKit. Es ist eine gute Investition. Ich denke, Sie werden feststellen, dass Sie es nicht viel benutzen werden ... aber wenn Sie einen brauchen, sind sie großartig.

1

Wenn was du bist wirklich nach ist Prävention von Leistungsproblemen, das ist genau die Art von Situation, in der ich gefunden habe this funktioniert am besten.

Erst heute Morgen hat mir jemand einen wirklich großen Datensatz geschickt, um ihn in der großen C# -App laufen zu lassen, die unsere Firma gerade baut. Es war so langsam, dass ich kaum widerstehen konnte es zu töten.

Da ich unter der VS IDE lief, habe ich es einfach ein paar Mal pausiert und sah, was es machte und warum. Es hat etwas getan, was keine Menge an Logging oder Raten gefunden hätte. Die Lösung war trivial und die Beschleunigung dramatisch.

Wenn Leistungsprobleme weniger schlimm sind, kann es mehrere weitere Beispiele benötigen, um sie zu finden, aber es funktioniert immer und könnte nicht einfacher sein.

Verwandte Themen