Zeit mit hoher Auflösung messen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Dasive.

    Zeit mit hoher Auflösung messen

    Guten Abend

    Ich habe mir eine Klasse gebaut um die Zeit zu messen, die bestimmte Vorgänge in meinem Programm benötigen.
    Diese werden anschließend in eine Textdatei geschrieben (log.txt).

    Um verschaltete Vorgänge messen zu können habe ich das ganze so aufgebaut, dass mehrere Zeiten gleichzeitig erfasst werden können.
    Ausgegeben wird einfach immer die letzte, aber das ist alles was ich brauche.

    Mein Problem ist das der Gesamtvorgang anscheinend nicht mehr Zeit benötigt als die "Sub-Vorgänge" was nicht möglich sein kann :huh:

    Die Messung mit einer StopWatch wahr mir zu ungenau, deshalb griff ich zu dieser Methode.

    Infos:
    Spoiler anzeigen
    Zeitmessungen:

    VB.NET-Quellcode

    1. Module time_management
    2. Dim measurements As New List(Of Long)
    3. Public Sub start_measurement()
    4. measurements.Add(Date.Now.Ticks)
    5. End Sub
    6. Public Function stop_measurement(Optional resolution_multiplier As Byte = resolution_multipliers.Microseconds) As Long
    7. Dim measurement As Long = CLng(Now.Date.Ticks - measurements.Item(measurements.Count - 1) / 1000)
    8. measurements.RemoveAt(measurements.Count - 1)
    9. For i As Integer = 0 To resolution_multiplier
    10. measurement = CLng(measurement / 1000)
    11. Next
    12. Return measurement
    13. End Function
    14. Public Enum resolution_multipliers As Byte
    15. Nanoseconds = 3
    16. Microseconds = 4
    17. Miliseconds = 5
    18. End Enum
    19. End Module


    Aufruf:

    VB.NET-Quellcode

    1. time_management.start_measurement()
    2. projects.Clear()
    3. check_directory(My.Settings.path_projects_di_ending)
    4. For Each project As String In My.Computer.FileSystem.GetDirectories(My.Settings.path_projects_di_ending)
    5. time_management.start_measurement()
    6. Dim project_info = My.Computer.FileSystem.GetDirectoryInfo(project)
    7. Dim new_project As New project_class
    8. With new_project
    9. .name = project_info.Name
    10. .created = project_info.CreationTime
    11. .last_edit = project_info.LastAccessTime
    12. .last_read = project_info.LastWriteTime
    13. .description = get_project_description(.name)
    14. End With
    15. projects.Add(new_project)
    16. log.write("PROJECT LOADED (" & time_management.stop_measurement & "µs)")
    17. Next
    18. log.write("ALL PROJECTS LOADED (" & time_management.stop_measurement & "µs)")


    Ausgabe (log.txt):

    Quellcode

    1. PROJECT LOADED (634µs)
    2. PROJECT LOADED (634µs)
    3. PROJECT LOADED (634µs)
    4. ALL PROJECTS LOADED (634µs)
    Ist es den möglich mit einer StopWatch eine Auflösung von ca 10'000stel Sekunden zu erreichen?

    Ich dachte es wären nur Milisekunden möglich.


    Nebenbei hat nicht jeder hier jahrelange Erfahrung oder eine Ausbildung absolviert, es gibt auch Anfänger.
    msdn.microsoft.com/de-de/libra….stopwatch.frequency.aspx
    eine Auflösung von 0.5µs hört sich doch schon sehr genau an - wenn die frequenz passt. Neben Miliskeunden gibts ja auch noch die Ticks^^

    Edit:
    Bei mir hat die Stopwatch ne Frequency von 3.215.400 Ticks pro Sekunde. Ein Tick entspricht also ca. 0.31µs.

    Vergangene Zeit in Sekunden = ElapsedTicks / Frequency

    also doch überaus genau

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