Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi cpu zeit einer schleife auslesen (https://www.delphipraxis.net/115057-cpu-zeit-einer-schleife-auslesen.html)

ferby 5. Jun 2008 01:13


cpu zeit einer schleife auslesen
 
Hallo,

wie kann man in Delphi herausfinden wieviel CPU Zeit eine bestimmte Schleife verbraucht?

also zb


procedure TForm1.Btn1Click(Sender: TObject);
begin
while z_temp.next<>NIl do
z_temp:=z_temp.next;

showmessage('Schleife hat ' + ?? + ' CPU Zeiteinheiten verbraucht');
end;


wer eine ahnung?


(Möchte nicht Zählen wie viel Zeit vergangen ist, zwischen vor und nach der Schleife, sondern wirklich die verbrauchte
CPU Zeit anzeigen lassen)

Ferby

turboPASCAL 5. Jun 2008 01:16

Re: cpu zeit einer schleife auslesen
 
Zitat:

Zitat von Luckie
Die Forensuche sollte helfen: Hier im Forum suchenQueryPerformanceCounter.


SirThornberry 5. Jun 2008 07:52

Re: cpu zeit einer schleife auslesen
 
mit QueryPerformanceCounter misst man auch nur die Zeit zwischen 2 Punkten. Dabei wird aber eben auch nicht berücksichtigt wenn andere Prozesse und Threads zwischenzeitlich Rechenzeit abbekommen. Somit bekommt man, je nach dem wie viel andere Prozesse laufen, verschiedene Ergebnisse.

ferby 5. Jun 2008 11:01

Re: cpu zeit einer schleife auslesen
 
Hallo,

es muss doch eine Möglichkeit geben, unabhängig von anderen Prozessen zu messen...

Bernhard Geyer 5. Jun 2008 11:21

Re: cpu zeit einer schleife auslesen
 
Ich mach sowas immer mit AQTime

OregonGhost 5. Jun 2008 11:23

Re: cpu zeit einer schleife auslesen
 
Unabhängig von anderen Prozessen geht nicht ohne weiteres. Wenn du aber hinreichend viele Tests machst (insbesondere bei sehr kurzen Funktioen wichtig), bekommst du trotzdem vergleichbare Ergebnisse. Profiler wie AQTime unterstützen dich dabei, dann musst du dich nicht um den Kleinkram kümmern.

Luckie 5. Jun 2008 11:35

Re: cpu zeit einer schleife auslesen
 
Zitat:

Zitat von OregonGhost
Unabhängig von anderen Prozessen geht nicht ohne weiteres.

Natürlichh geht das. Mit MSDN-Library durchsuchenGetThreadTimes kan nman die CPU-Zeit ermitteln die der Code im User mode bzw. im Kernel mode verbringt.

OregonGhost 5. Jun 2008 15:18

Re: cpu zeit einer schleife auslesen
 
Nun, wie hier zu lesen ist (und auch an diversen anderen Orten), ist auch GetThreadTimes aus verschiedenen Gründen nicht völlig unabhängig von anderen Threads. Auch hier wäre also eine hinreichende Zahl von Tests notwendig, und wenn die zu testende Funktion z.B. eine Wait-Funktion aufruft, stimmen die Zeiten erst recht nicht mehr und die Wartezeit ist auch noch besonders intensiv von anderen laufenden Prozessen und Threads beeinflusst.

ferby 5. Jun 2008 18:43

Re: cpu zeit einer schleife auslesen
 
Hello,

wir müssen doch nur die Zeitdiverenz messen....

Gibt es in Delphi eine Funktion, die mir die Anzahl der Sekunden seit 1.1.1970 zurückliefert?
So wie die Time Funktione in C?

Cyf 5. Jun 2008 20:00

Re: cpu zeit einer schleife auslesen
 
Zitat:

Zitat von ferby
Hello,

wir müssen doch nur die Zeitdiverenz messen....

Gibt es in Delphi eine Funktion, die mir die Anzahl der Sekunden seit 1.1.1970 zurückliefert?
So wie die Time Funktione in C?

:?: Ich dachte das Ganze soll unabhängig ablaufen?
Die Zeitdifferenz wird davon beeinflusst, was "im Hintergrund" so noch abläuft, aber wenn doch ungenauere Werte reichen sollte, kannst du das hiermit (am besten mehrfach) austesten:

Delphi-Quellcode:
procedure TForm1.UngenauMessen;
var
  Zeit: Cardinal;
begin
  Zeit := GetTickCount;

  //Befehlesfolge deren Zeitdauer bestimmt werden soll
  sleep(2000);
  //

  Button1.Caption:= (IntToStr(GetTickCount - Zeit) + ' ms');
end;
oder genauer, aber rechenintensiver:

Delphi-Quellcode:
procedure TForm1.GenauMessen; //genauer aber mehr Ressourcenverbauch
var
  a, b, c: Int64;
begin
  QueryPerformanceFrequency(a);
  QueryPerformanceCounter(b);

  //Befehlesfolge deren Zeitdauer bestimmt werden soll
  sleep(2000);
  //

  QueryPerformanceCounter(c);

  Button1.Caption:= Format('%.3f ms',[(c - b) * 1000 / a]);  //Ausgabe in ms
end;
Hoffe das ist hilfreich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Seite 1 von 2  1 2      

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