Stopwatch-Zeiten in Liste abspeichern, seltsames Verhalten

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Stopwatch-Zeiten in Liste abspeichern, seltsames Verhalten

    Hallo,

    mir ist Folgendes aufgefallen, als ich mir eine Timer-Klasse schrieb, mit der ich die Laufzeit einiger Testmethoden bestimmen will.
    Ich rufe zwischen zwei Testmethoden immer eine StoreTime()-Methode der Timer-Klasse auf. Im Timer-Objekt läuft eine Stopwatch und bei jedem StoreTime soll ElapsedMilliseconds in einer Long-Liste hinzugefügt werden.
    Später kann ich dann aus den Zeitdifferenzen der Listeneinträge die Zeitdauer für das Abarbeiten einer Methode ausrechnen.

    VB.NET-Quellcode

    1. Sub StoreTime()
    2. timeList.add(stopwatch.ElapsedMilliSeconds)
    3. End Sub


    Wenn ich einen Haltepunkt in StoreTime setze und Debugge passiert es:
    Bei jedem Step verändern sich die Einträge der Liste auf scheinbar willkürliche Werte, als wäre Long ein Referenztyp, der noch auf ElapsedMilliSeconds verweist.

    Beispiel:
    Test1() dauert 100ms
    timer.StoreTime() 'timeList(0) == 100
    Test2() dauert 200ms
    timer.StoreTime() '!!!!!! Jetzt ist timeList(0) == -45898
    . ' timeList(1) == 300


    Woran liegt das bitte. Werden generische Typen in VB ähnlich wie in Java in irgendwie geboxt? Was muss ich anders machen?
    Ich hoffe mal ich konnte mein Problem klar schildern, vielen Dank für eure Hilfe.

    Grüße Streamfighter
    Ok, ich habs. Ein dummer kleiner Fehler von mir, da muss man erstmal draufkommen:

    Es hat nur beim Debuggen nicht Funktioniert, weil jedes mal wenn VS die timer-Variable als Tooltipp darstellt die toString-Funktion in timer aufgerufen wird. Hier wird eine Methode aufgerufen, die die Differenzen berechnet um diese anzuzeigen. Und da lag der Fehler: Bei der Differenzberechnung wurde die Liste blöderweiße verändert.

    D.h. obwohl ich nie selber die Methode mit dem Fehler aufrief, hat VS es über 10 Ecken getan ohne mir es zu sagen, oder bei Haltepunkten zu stoppen und so den Zustand des timer-Objekts verändert immer dann, wenn der Tooltipp neu erzeugt wurde. Und ich dachte die Zahlen ändern sich ständig, weil die ElapsedMilliseconds sich ändern.

    Also hat sich alles geklärt. Danke trotzdem SpaceyX

    Streamfighter schrieb:

    VB.NET-Quellcode

    1. timeList.add(stopwatch.ElapsedMilliSeconds)
    Pack nicht die ElapsedMilliSeconds in Deine Liste sondern die TimeSpan-Struktur Elapsed, da kannste im Verlauf besser mit arbeiten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!