Laden...

Oft verwendete try-finally mit Hilfe von IDisposable vereinfachen

Erstellt von 0815Coder vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.764 Views
0
0815Coder Themenstarter:in
767 Beiträge seit 2005
vor 16 Jahren
Oft verwendete try-finally mit Hilfe von IDisposable vereinfachen

Beschreibung:

Das Snippet zeigt, dass man IDisposable nicht nur zum freigeben von Resourcesn verwenden kann, sondern auch, um oft verwendete try-finally Blöcke zu vereinfachen, da diese dann mit using() verwendet werden können.

Etwas das recht häufig in try-finally Blöcken gemacht wird, ist die Zeit zu messen, die eine bestimmte Methode oder ein Teil einer Methode braucht. Das sieht dann zB so aus:


Stopwatch _watch = Stopwatch.StartNew();
try
{
    // do something...
}
finally
{
    Console.WriteLine("MeineMethode: {0} ms", _watch.ElapsedMilliseconds);
}

Das kann auch vereinfacht werden und so aussehen:


using (new Stopper("MeineMethode"))
{
    // do something...
}

Damit das funktioniert braucht man die Klasse Stopper (das eigentliche Snippet, das ich euch vorstellen will).


public class Stopper : IDisposable
{
    private readonly string _message;
    private readonly Stopwatch _watch = Stopwatch.StartNew();

    public Stopper(string message)
    {
        _message = message;
    }
    
    public void Dispose()
    {
        Console.WriteLine("{0} took {1} ms", _message, _watch.ElapsedMilliseconds);
    }
}

Die Klasse ist hier recht einfach - ich verwende zB log4net, ist aber ganz simpel und dennoch effektiv, Code wird so wesentlich leichter lesbar (meine Ansicht).

Beim Instanzieren wird eine Stopwatch gestartet, und beim Dispose() wird die Zeit ausgegeben. Mehr fällt mir dazu nicht ein.

Aber vielleicht habt ihr schon IDisposable für ähnliche Sachen verwendet, bin gespannt was Euch dazu einfällt...

Zeitmessung, IDisposable

loop:
btst #6,$bfe001
bne.s loop
rts