Ich möchte gerne meinen Code optimieren. Dazu muss ich erst einmal die großen Dinge raus finden die viel Zeit benötigen. Dazu habe ich mir diese Routinen geschrieben um die Zeiten auf zu zeichnen:
- Start der Messung
- Zwischenzeiten
- Ende der Messung, Ausgabe als String
Leider funtioniert "Now" nicht, während der Ausführung der Routine hat "Now" immer den gleichen Wert. "Now" wird wohl nicht fortlaufend vom System gelesen.
Gibt es etwas anderes um einigermaßen ms genau die Laufzeit erfassen zu können?
Vielen Dank für Ideen, VG Markus
Hier der Code:
Code: Alles auswählen
Var lstTMess: TList;
// Zeitmessungen
// Start der Messung
Procedure TMessStart();
Begin
If Not Assigned(lstTMess) Then
lstTMess := TList.Create
Else lstTMess.Clear;
TMessPoint(); // Zeitstempel Start Zeitpunkt
End;
// Messpunkt hinzufügen
Procedure TMessPoint();
Var dt: TDateTime;
i: LongInt absolute dt;
Begin
If Assigned(lstTMess) Then
Begin
dt := Now;
lstTMess.Add(Pointer(PtrInt(i)));
End;
End;
// Ende Messung, Ausgabe Zeitwerte
Function TMessEnd(): String;
Var dt: TDateTime;
i: LongInt absolute dt;
dtStart: TDateTime;
Begin
Result := '';
If Not Assigned(lstTMess) Then
Exit;
If lstTMess.Count = 0 Then
Exit;
TMessPoint();
i := PtrInt(lstTMess.Items[0]);
dtStart := dt;
lstTMess.Delete(0);
While lstTMess.Count > 0 Do
Begin
i := PtrInt(lstTMess.Items[0]);
Result := Result + ';' + FormatDateTime('[s]:zzz', dt - dtStart);
lstTMess.Delete(0);
End;
If Result <> '' Then
Delete(Result, 1, 1);
FreeAndNil(lstTMess);
End;