Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie schnell ist Now? (https://www.delphipraxis.net/29342-wie-schnell-ist-now.html)

FAlter 9. Sep 2004 17:37

Re: Wie schnell ist Now?
 
Wisst ihr, wie Now implementiert ist?

Delphi-Quellcode:
Result := Date + Time;
Ich denke, man sieht, wie leicht sich ein paar Ticks sparen lassen. Und GetTickCount ist dann, wenn es nur auf Millisekunden ankommt, vermutlich die bessere Wahl (unbewiesene Behauptung). Bei noch genauerer

PS: Schade, dass delphi keine Makros kann :(

glkgereon 9. Sep 2004 17:49

Re: Wie schnell ist Now?
 
Delphi-Quellcode:
    writeln('Es wird nun die Geschwindigkeit von "now" 1 Minute lang getestet...');
    zeit:=now;
    while (now<zeit+1/24/60) do inc(i);//1=tag /24=stunde /60=minute
    writeln('Es wurden '+inttostr(i)+' Versuche geschafft...');
    writeln('-> '+floattostr(i / 60)+' pro Sekunde...');
    writeln('-> '+floattostr(60000 / i)+' Millisekunden pro Durchlauf...');
also das is mein qt...

bei dem kommt immer in etwa dasselbe raus
beispiel:
90162736 Versuche
1502712,26666667 pro Sekunde
0,000665463390551946 Ms pro Durchlauf
-> für "ein Now" weniger als 0,001 Ms

kann das sein?

EDIT:

Es kommt noch schlimmer: in einem Dauerlauf sinkt die zeit kontinuierlich...
hier meine logfile, in der ich von jeder runde meinen zähler speicher (welcher immer höher steigt):

Zitat:

15425227
31223342
44994514
59589841
75048739
90764494
105974080
121638413
136844801
149813096
164240349
178464597
193157262
208506152
223825834
239124542
254333749
269997018
285589556
300514267
die letzte zahl bringt es auf unter 3,3 E-5 Ms pro Now

wo ist der fehler in meinem quelltext?

Sprint 9. Sep 2004 18:37

Re: Wie schnell ist Now?
 
Zitat:

Zitat von glkbkk
wo ist der fehler in meinem quelltext?

Zuerst einmal musst du wissen was die Funktion Now macht. Now ruft intern die WinAPI Funktion GetLocalTime auf.
Diese Funktion steckt in der KERNEL32.DLL Datei.
Dieser Wert wird aber nur in einem bestimmten Takt erneuert. Wenn du also in einer Schleife eine Minute lang aufrust,
dann ist einmal das System ausgelastet und du verfälscht dadurch die Geschwindikeit von Windows. Hinzu kommt noch, das der interne Wert von GetLocalTime nicht bei jedem Aufruf erneuert wird.
Also wirst du so nie eine genaue Zeitmessungen durch führen können.

glkgereon 9. Sep 2004 18:42

Re: Wie schnell ist Now?
 
ja gut, aber es geht mir ja nicht darum die zeit zu nehmen, sondern darum, wie lange now braucht, und dies verkürzt sich mit zunehmender laufzeit ins unrealistische, hier mein aktueller log:

Zitat:

15425227
31223342
44994514
59589841
75048739
....
2508025096
2523343282
2538599782
2553783069
2568940084
beim letzten mal braucht er nur noch 0,000003715 Ms

danach wird windows im aufrufen dieser funktion jedes mal ein klein wenig besser...
find ich irgendwo unlogisch...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr.
Seite 3 von 3     123   

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