AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Laufzeit einer Prozedur/Funktion

Ein Thema von holle · begonnen am 19. Nov 2008 · letzter Beitrag vom 20. Nov 2008
Antwort Antwort
holle

Registriert seit: 15. Nov 2005
Ort: Uckerland
138 Beiträge
 
Delphi 7 Enterprise
 
#1

Laufzeit einer Prozedur/Funktion

  Alt 19. Nov 2008, 20:10
Ich würde gerne eine Prozedur schreiben zum Messen der Laufzeit einer belibigen Prozedur oder Funktion. Beim Aufruf der Prozedur soll dann die Prozedur/Funktion übergeben werden. So hatte ich angefangen, das funktioniert aber noch nicht:

Delphi-Quellcode:
program zeit;
type
  proc = procedure;

procedure beispiel;
begin
  // mache irgendwas
end;

procedure laufzeit(p: proc);
begin
  // messe laufzeit
  p;
  // messe laufzeit
  // gib laufzeit aus
end;

begin
  laufzeit(beispiel);
end.
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Laufzeit einer Prozedur/Funktion

  Alt 19. Nov 2008, 20:16
woran genau scheiterst du? An der Ausgabe der Zeit?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
holle

Registriert seit: 15. Nov 2005
Ort: Uckerland
138 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Laufzeit einer Prozedur/Funktion

  Alt 19. Nov 2008, 20:30
Der Prozedur Laufzeit muss doch eine Variable übergeben werden (die Funktion/Prozedur). Wenn ich den proc so definiere wie oben, bekomme ich beim Aufruf mit einer Prozedur mit zwei Parametern den Fehler: Incompatible type for arg no. 1: Got "untyped", expected "<procedure variable type of procedue;Register>".
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Laufzeit einer Prozedur/Funktion

  Alt 19. Nov 2008, 21:33
Nun ja, wie macht man es denn im richtigen Leben, wenn man keine Stoppuhr hat? Man merkt sich die Anfangs- und Endzeit und zieht dann von der Endzeit die Anfangszeit ab:
Delphi-Quellcode:
start := GetTickCoint;
// tu was
end := GetTickCount;
zeit := end - start;
Da GetTickCount die Zeit in Millisekunden angibt, hast du danach die Laufzeit in Millisekunden.

Allerdings ist zu beachten, dass Windows ein Multitaskbetriebssystem ist und dieser Wert ein sehr grober Wert ist, da die CPU zwischenzeitlich auch Code in anderen Threads anderer Prozesse ausführt. Willst du es genauer musst du mit MSDN-Library durchsuchenGetThreadTimes arbeiten oder versuchen die CPU Taktzyklen zu ermitteln. Das wäre dann am genausten und von der Auslastung des Systems unabhängig.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Laufzeit einer Prozedur/Funktion

  Alt 19. Nov 2008, 21:37
Falls Du ein paar € ausgeben kannst: Es gibt mit AQTime ein bezahlbares, klasse Tool das in wenigen Minuten ohne Quellcodeanpassungen Hotspotanalysen ermöglicht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
holle

Registriert seit: 15. Nov 2005
Ort: Uckerland
138 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Laufzeit einer Prozedur/Funktion

  Alt 20. Nov 2008, 08:01
getTickCount zur messung der Laufzeit kenne ich. Ich würde nur erne eine Prozedur schreiben, der ich eine beliebige andere Prozedur übergeben kann um somit die Laufzeit zu messen.
Marcel
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Laufzeit einer Prozedur/Funktion

  Alt 20. Nov 2008, 08:41
Eine beliebige andere Prozedur/Funktion wird nicht gehen, denn Du musst ihr ja Parameter übergeben. Deine Idee funktioniert für parameterlose Routinen. Für andere musst du eben einen anderen Prozedurtypen deklarieren. Ich glaube, Du denkst Dir so etwas:
Delphi-Quellcode:
Procedure LaufzeitMessen (Proc : TProzedurMitBeliebigenParametern);
Begin
  // Messen
End;
...
Laufzeitmessen(EineProzedur(a,b,c,d,e));
Das geht so zwar nicht, aber wenn Du die zu testende Routine in eine eigene parameterlose Prozedur packst, und dann deine Laufzeitmessung mit dieser Prozedur aufrufst, geht das schon. Na ja, irgendwie jedenfalls.
Delphi-Quellcode:
Procedure Laufzeitmessen (Proc : TProcedure);
Begin
  /Messen
End;

Procedure TestProc;
Var
  a,b : Integer;
  c,d,e : String; // Zum Beispiel;

Begin
  a := 1; b := 2; ... // Parameter setzen oder einmalig global
  EineProzedur(a,b,c,d,e);
End;

...
Laufzeitmessen (TestProc);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
holle

Registriert seit: 15. Nov 2005
Ort: Uckerland
138 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Laufzeit einer Prozedur/Funktion

  Alt 20. Nov 2008, 10:27
schade, dann geht das wohl nicht so wie ich es mir vorgestellt hatte. dann werde ich das doch gleich mit in die prozedur einbauen, ist wohl am einfachsten.
Marcel
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Laufzeit einer Prozedur/Funktion

  Alt 20. Nov 2008, 10:32
Denk dran, das GetTickCount nur auf ein paar MS genau ist. Die Ungenauigkeit potentiert sich, wenn du viele kurze Einzelmessungen addierst. Ich glaube, GetTickCount geht auf 18ms genau, Du solltest also mindestens 1-2 Sekunden messen, um eine 1%-Genauigkeit zu bekommen. Du kannst auch mit dem PerformanceCounter von Windows arbeiten
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#10

Re: Laufzeit einer Prozedur/Funktion

  Alt 20. Nov 2008, 12:02
Zitat von Bernhard Geyer:
Falls Du ein paar € ausgeben kannst: Es gibt mit AQTime ein bezahlbares, klasse Tool das in wenigen Minuten ohne Quellcodeanpassungen Hotspotanalysen ermöglicht.
Kann ich nur bestätigen! Klasse Tool!
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz