Hallo
Bei der Erstellung eines kleineren Programmes wollte ich zeitkritische Routinen näher untersuchen, dazu wollte ich einfach im ersten Ansatz die Procedur und Methoden-Aufrufe zählen um festzustellen, wieoft eine kritische Procedure/Function den tatsächlich durchlaufen wird. Die Idee war, in jede fragliche Procedur als ersten Befehl einen Aufruf einer Zählmethode einzubinden. Also etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Procedur beliebig; begin Zaehlemich(beliebig); . . end; |
Was man noch braucht ist eine einfache Textliste mit den Namen der zu untersuchenden Proceduren und Functionen.
Wird die unten stehende Procedure durchlaufen, wird einfach in der Liste der übergebene Begriff gesucht und - wenn gefunden, der dahinterstehende Wert incrementiert.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| Beispiel Liste: Die Null muß nicht vorgegeben werden, macht den ersten Start aber schneller
Procedure1 0 Procedure2 0 . .
Procedure TForm3.Counter(Path,was : String); var CounterTab: TStringList; i,x,y,zb: Integer; sb,zw,za,womit: String;
begin womit := was; CounterTab := TStringList.Create; try CounterTab.LoadFromFile(Path); for i := 0 to CounterTab.Count - 1 do begin sb := CounterTab.Strings[i]; If Pos(' ',sb) > 0 then delete(sb,Pos(' ',sb),(length(sb)-pos(' ',sb))); if (Pos(was,CounterTab.Strings[i]) > 0) then begin sb := CounterTab.Strings[i]; x := length(sb); y := Pos(' ',sb); za := copy(sb,y,(x - y + 1)); If za = was then za := '0'; zb := StrtoInt(za); inc(zb); zw := InttoStr(zb); womit := womit + ' ' + zw; CounterTab.Strings[i] := was; CounterTab.Strings[i] := StringReplace(CounterTab.Strings[i],was,womit,[rfReplaceAll,rfIgnoreCase]); end; end; CounterTab.SaveToFile(Path); finally CounterTab.Free; end; end;
Aufruf: counter(PfadzurListe,Procedurename); |
Mittlerweile habe ich dadurch einige Programmierfehler gefunden, vielleicht kann der eine oder andere davon profitieren.
Und ja, an dem Konzept kann sicher noch einiges optimiert werden. So würde das automatische Ermitteln der Procedur- und Functionsnamen im Aufruf der Zählprocedure einiges an Vorarbeit ersparen.
Gruß Delphi10