[vb.net] Zeit stoppen (Zeitmessung)
Gepostet am: Mar 21, 2011 4:29:56 PM
Zeit stoppen
Dim dStartzeit As DateTime = Now'...Dim ts_Zeitdifferenz As TimeSpan = DateTime.op_Subtraction(Now, dStartzeit)'Ausgabe Debug.WriteLine(ts_Zeitdifferenz.TotalMilliseconds.ToString() & " ms")
In größeren Programmen verwende ich dazu zwei Funktionen:
Modul: Zeitmessung
Module Zeitmessung Public Function ZeitmessungStart() As DateTime ZeitmessungStart = Now
End Sub Public Function ZeitmessungEnde(ByVal dStart As DateTime) As String Dim tdiff As TimeSpan = DateTime.op_Subtraction(Now, dStart) ZeitmessungEnde = tdiff.TotalMilliseconds.ToString & " ms" End FunctionEnd Module
Auf diese Art kann man recht leicht, sich überlagernde Zeitmessungen erstellen. zB.
> Dim Zeit1 as DateTime = ZeitmessungStart()
> .....
> Dim Zeit2 as DateTime = ZeitmessungStart()
> ....
> debug.print(ZeitmessungEnde(Zeit2))
> debug.print(ZeitmessungEnde(Zeit1))
Das ganze ist natürlich nur ein rudimentärer Ansatz. Mit folgender Klasse lassen sich aber recht praktische Anwendungen realisieren.
Zeitmessung Klasse
Public Class Zeitmessung Private dSTart As DateTime Public Sub New() dStart = Now End Sub Public Sub New(ByVal startD As DateTime) dSTart = startD End Sub Public Sub Restart() dSTart = Now End Sub Public ReadOnly Property Zeitmessung() As String Get Dim tdiff As TimeSpan = DateTime.op_Subtraction(Now, dSTart) Return tdiff.TotalMilliseconds.ToString & " ms" End Get End Property Public ReadOnly Property getMs As Long Get Dim tdiff As TimeSpan = DateTime.op_Subtraction(Now, dSTart) Return tdiff.TotalMilliseconds End Get End Property Public ReadOnly Property getTime As String Get Dim tdiff As TimeSpan = DateTime.op_Subtraction(Now, dSTart) Return FormatTimeSpan(tdiff) End Get End Property Private Function FormatTimeSpan(ByVal time_span As _ TimeSpan, Optional ByVal whole_seconds As Boolean = _ True) As String Dim txt As String = "" If time_span.Days > 0 Then txt &= ", " & time_span.Days.ToString() & " days" time_span = time_span.Subtract(New _ TimeSpan(time_span.Days, 0, 0, 0)) End If If time_span.Hours > 0 Then txt &= ", " & time_span.Hours.ToString() & " hours" time_span = time_span.Subtract(New TimeSpan(0, _ time_span.Hours, 0, 0)) End If If time_span.Minutes > 0 Then txt &= ", " & time_span.Minutes.ToString() & " " & _ "minutes" time_span = time_span.Subtract(New TimeSpan(0, 0, _ time_span.Minutes, 0)) End If If whole_seconds Then ' Display only whole seconds. If time_span.Seconds > 0 Then txt &= ", " & time_span.Seconds.ToString() & " " & _ "seconds" End If Else ' Display fractional seconds. txt &= ", " & time_span.TotalSeconds.ToString() & " " & _ "seconds" End If ' Remove the leading ", ". If txt.Length > 0 Then txt = txt.Substring(2) ' Return the result. Return txt End FunctionEnd Class
Der Start der Zeitmessung erfolgt recht einfach:
> Dim Zeitmesser1 As New Zeitmessung
die verstrichene Zeit kann man jederzeit mittels
> ZeitmesserDateieneinlesen.getMs
abrufen. (oder auch über die anderen public read properties)