Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Geschwindigkeit einer Funktion messen (https://www.delphipraxis.net/117686-geschwindigkeit-einer-funktion-messen.html)

Meflin 23. Jul 2008 14:22

Re: Geschwindigkeit einer Funktion messen
 
Zitat:

Zitat von Bernhard Geyer
Wenn mir der Proviler sagt das 90% der Rechenzeit an 5 Quellcodezeilen verbraten werden ist es egal ob diese um den Faktor 5 verlangsamt wurden.

Schon klar. Aber wenn er nur wissen will "Funktion XY läuft Z Sekunden", dann ist AQTime wohl die falsche Wahl.

Abgesehen davon: vielleicht will ers ja auch im Programm ausgeben :gruebel:

Gargamel 23. Jul 2008 14:24

Re: Geschwindigkeit einer Funktion messen
 
Genau die richtigen Hinweise. Danke an alle.
Funktioniert prima.

Forlan 23. Jul 2008 14:24

Re: Geschwindigkeit einer Funktion messen
 
Zitat:

Zitat von Gargamel
Genau die richtigen Hinweise. Danke an alle.
Funktioniert prima.

welche der lösungen funktioniert denn prima???^^

Fussball-Robby 23. Jul 2008 14:29

Re: Geschwindigkeit einer Funktion messen
 
Zitat:

Zitat von Forlan
Müsste es so nicht klappen????

Delphi-Quellcode:
procedure TForm1.Go;
var start,stop,zeit : integer;
begin
  start := GetTickCount;
     //Hier deine Funktion
  stop := GetTickCount;
  zeit := stop-start;
  ShowMessage('Gebrauchte Zeit '+ IntToStr(zeit) + ' ms';
end;

GetTickCount misst Millisekunden, für Funktionen, die länger dauern, reicht das natürlich. Um einiges genauer ist aber MSDN-Library durchsuchenQueryPerformanceCounter (welches ja ganz am Anfang schon von sakura angesprochen wurde)

Gargamel 23. Jul 2008 14:31

Re: Geschwindigkeit einer Funktion messen
 
OK. Hier der Quellcode. Wundert Euch bitte nicht, warum ich ständig PChar in String konvertiere. Der Grund ist der, daß ich mit der Torque Game Engine arbeite und die komplett in C++ geschrieben wurde. Da ich aber C++ nur dann anfasse, wenn unbedingt nötig, nutze ich lieber mit der 3D Engine eine zusätzliche DLL, die ich in Delphi schreibe. Daher die Umwandlung.
Die Zeitmessung ist deswegen interessant, da KI und Wegfindung recht aufwändige Berechnungen sind. Und ich will halt wissen, wie schnell die Algorithmen ablaufen.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Start, Stop, Frequenzy: Int64;
    i:integer;
    name_p:PChar;
    name_s:string;
begin
  Listbox1.clear;
  QueryPerformanceFrequency(Frequenzy);
  QueryPerformanceCounter(Start);

  for i:=1 to StrToInt(Edit1.text) do
  Begin

    name_p:='Ich mag Delphi';

    name_s:=StrPas(name_p);

    listbox1.Items.Add(IntToStr(i)+': '+name_s);

  End;

  try
    QueryPerformanceCounter(Stop);
    ShowMessage(FormatFloat('0.00', (Stop - Start) * 1000 / Frequenzy) + ' Millisekunden');

  finally

  end;
end;

Apollonius 23. Jul 2008 14:32

Re: Geschwindigkeit einer Funktion messen
 
Das hat Daniel doch schon erwähnt, Robert. Wenn mich meine Erinnerung nicht trügt, wurde hier auch kürzlich ein Problem mit QueryPerformanceCounter erwähnt, das auftritt, wenn der Thread die CPU wechselt.

Bernhard Geyer 23. Jul 2008 14:36

Re: Geschwindigkeit einer Funktion messen
 
Zitat:

Zitat von Gargamel
Die Zeitmessung ist deswegen interessant, da KI und Wegfindung recht aufwändige Berechnungen sind. Und ich will halt wissen, wie schnell die Algorithmen ablaufen.

Für sowas ist ein Line-Profiler wie bei AQTime super.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:05 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz