Zeitermittlung "Prozesslauf"

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Zeitermittlung "Prozesslauf"

    Hallo Leute :D

    Eine kleine und knappe Frage:
    Wie kann ich am besten die verstrichene Zeit einer Methode ermitteln?
    Oder sagen wir so: Die Zeit die vergangen ist, welche die Methode benötigt.

    2 Ideen:
    1. Zeit erfassen bei Start der Methode. -> Ende der Methode -> Anschließend die beiden Daten auswerten/verrechnen
    2. Timer einbauen..? (Wovon ich allerings nichts halte, denke mir, dass dies zu ungenau wird)
    Gruß,
    Drahuverar
    Option Strict On!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Drahuverar“ ()

    Für eine Methode innerhalb deiner Anwendung würde ich die Stopwatch Klasse benutzen.

    VB.NET-Quellcode

    1. Shared Sub Main(ByVal args() As String)
    2. Dim stopWatch As New Stopwatch()
    3. stopWatch.Start()
    4. TuWas()
    5. stopWatch.Stop()
    6. End Sub

    @Eddy
    Danke, aber ist das nicht die im Task-Manager aufgelistete CPU-Zeit?
    Wäre die dann nicht etwas ungenau?

    @Solaris
    Danke, das schaue ich mir mal an. Scheint wohl treffender zu sein.

    Zu dem Ablauf;
    Ich habe kein Programm in dem Sinne, eher ein Plug-in. Mit diesem möchte ich einfach nur erfassen wie lange das eigentliche Programm benötigt für gewisse Abläufe.
    Ich denke an diesem Punkt wäre mein erster Vorschlag am besten, da ich ja den Start und das Ende definitiv erhalte. Während dem eigentlichen Programmlauf scheint es da im Hintergrund noch ein paar Verarbeitungen zu geben, die ich nicht auswerten kann...
    Option Strict On!
    Kann ich nicht nachvollziehen, unter Win7 sehe ich keine Startzeit im Taskmanager. Kann nur sagen bei mir kommt eine korrekte Zeit raus. Aber wenn es um die Zeit in deiner Anwendung geht, brauchste ja nur die Startzeit sichern, dann kannste die Differenz immer selbst ermitteln, oder so wie Solaris es schrieb.
    And i think to myself... what a wonderfuL World!

    VB.NET-Quellcode

    1. Public Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim lngStart As Long = GetTickCount
    4. //do something
    5. MessageBox.Show(GetTickCount() - lngStart & " ms")
    6. End Sub

    Probier das mal aus.
    Hier könnte meine Signatur stehen.
    Wozu eine WIN API verwenden wenn Stopwatch genau dafür gedacht ist. Solaris' Lösung ist eigentlich nix hinzuzufügen.
    Und wenn du shcon WIN API verwendest, dann verwende doch die zeitgemäße Deklaration. (DllImport)

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Danke euch für eure Posts,
    bin gestern leider nicht dazu gekommen hierzu eine Antwort zu verfassen.

    Also die Stopwatch-Klasse ist da echt Super, danke hierfür @Solaris
    Hier muss man meiner Meinung nach am wenigsten machen-> instanzieren -> starten -> stoppen -> auswerten.
    Option Strict On!

    Drahuverar schrieb:

    instanzieren -> starten -> stoppen -> auswerten
    Du kannst sie auch weiterlaufen lassen: .Start() vs. .Restart(), gugst Du hier.
    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!
    @RodFromGermany
    @Thunderbolt
    Danke für die Hinweise! Ich habe mir vorgestern noch die Klasse angesehen und nutze momentan auch .Restart(). Nach dem ersten Versuch hatte ich ca. doppelt soviel Zeit gemessen und mich schon gewundert, wieso auf einmal der Prozess doppelt so viel Zeit benötigt hatte.

    Wobei ich, sobald ich da nochmal dran gehen müsste, das mittels StartNew() lösen werde.

    Danke :)



    Option Strict On!