Auf Grund meines letzten Posts, möchte ich schnell noch eine kleine Klasse zeigen, mit der ich die verbrauchte Zeit einer Aktion schnell ausgeben kann.
Grundlegend nimmt man dafür ja das Objekt Stopwatch aus dem Namespace System.Diagnostics her. Aber die Handhabung ist teilweise meiner Meinung nach zu viel Tipparbeit. Daher hab ich mir da mal eine kleine Klasse geschrieben, mit der man das recht schön vereinfachen kann.

Die reguläre Syntax bei der Verwendung von Stopwatch sieht so aus:


    Stopwatch watch = new Stopwatch();
    watch.Start();
    DoSomething();
    watch.Stop();
    Console.WriteLine("elapsed {0}", watch.Elapsed);

Viel schöner ist es so:


    using (Watch watch = new Watch(elapsed => Console.WriteLine("elapsed {0}", elapsed)))
        DoSomething();

Die ganze Logik ist ausgelagert.

Die Idee dahinter war eigentlich nur, dass ich das Ganze in einen Using packe und die Ausgabe dann beim Dispose vornehme. Und genauso sieht auch die Umsetzung aus:


    public class Watch: IDisposable
    {
        private readonly Stopwatch _watch = new Stopwatch();
        private readonly Action<TimeSpan> _output;

        public Watch(Action<TimeSpan> output)
        {
             _output = output;
             _watch.Start();
        }

        public void Dispose()
        {
            _watch.Stop();
            _output(_watch.Elapsed);
        }
    }

Ich denke, da muss man nicht viel erklären und das kann jeder recht schnell einsetzen.