![]() |
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 |
Re: cpu zeit einer schleife auslesen
Zitat:
|
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.
|
Re: cpu zeit einer schleife auslesen
Hallo,
es muss doch eine Möglichkeit geben, unabhängig von anderen Prozessen zu messen... |
Re: cpu zeit einer schleife auslesen
Ich mach sowas immer mit
![]() |
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.
|
Re: cpu zeit einer schleife auslesen
Zitat:
![]() |
Re: cpu zeit einer schleife auslesen
Nun, wie
![]() |
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? |
Re: cpu zeit einer schleife auslesen
Zitat:
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:
oder genauer, aber rechenintensiver:
procedure TForm1.UngenauMessen;
var Zeit: Cardinal; begin Zeit := GetTickCount; //Befehlesfolge deren Zeitdauer bestimmt werden soll sleep(2000); // Button1.Caption:= (IntToStr(GetTickCount - Zeit) + ' ms'); end;
Delphi-Quellcode:
Hoffe das ist hilfreich.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr. |
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