Autor |
Beitrag |
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 29.03.05 22:01
Moin  !
Die Forensuche brachte allerhand interessanten Code, aber ich konnte nirgendwo finden, welche Einheit das Ergebnis folgender Funktion hat:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function TDSCalendar.TestPerformance: Extended; var Start, Ende, f: Int64; begin QueryPerformanceCounter(Start); Repaint; QueryPerformanceCounter(Ende); QueryPerformanceFrequency(f); Result := (Ende - Start) / f; end; |
Der mathematische Teil meines Gehirns sagt: x [keine Einheit] / Frequenz [s^-1] = Zeit [s], also die Dauer in Sekunden. Mein anderer Teil sagt: das kann nicht sein, dass das Repaint grademal 1 Millisekunde (1000 * Result ~ 1,1) benötigt (die Funktion ist z.Z. > 300 Zeilen und durchläuft etliche Schleifen; außerdem ruckelt das Canvas ^^). Wäre euch sehr verbunden, wenn ihr mir sagen könntet, wo die unsichtbare Wand ist, gegen die ich da gelaufen bin ^^.
AXMD
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Di 29.03.05 23:16
Hallo,
habe die Hilfe dazu nur kurz überflogen, aber ich bin mir eigentlich sicher, dass dein Beispiel so stimmt. Das Ergebnis, dass du bekommst, ist in Sekunden und bei meinem Test eben, hat es auch wunderbar funktioniert.
Also ehrlich gesagt habe ich keine Ahnung warum es bei dir nicht klappt. Vielleicht wartet die Zeitmessung nicht auf das Ende von Repaint? Ist allerdings auch sehr unsicher.
Folgendes funktioniert allerdings ohne Probleme: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var Start, Ende, f: Int64; G: Extended; begin QueryPerformanceCounter(Start); Sleep(1000); QueryPerformanceCounter(Ende); QueryPerformanceFrequency(f); G := (Ende - Start) / f; ShowMEssage(FloatToStr(G)); | Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 29.03.05 23:20
Die Zeiten können durchaus realistisch sein, jedoch stimmen Sie nur dann, wenn sie auf längere Sicht konstant bleiben und nicht durch Programmierfehler in der Paint-Routine zu Overhead in der Verwaltung führen.
Die Einheit ist zwar Sekunden, es empfielt sich aber besonders bei QPC\QPF in Schleifen zu messen und zu mitteln.
Den anderen wird allerdings hierzu der Quelltext fehlen, um das erwähnte nachzuvollziehen.
P.S.: AXMD gab mir auf Anfrage den Source zum testen und ich stellte mehrere Speicherlöcher und optimierungswürdige Stellen fest, die ich ihm mitteilte.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 29.03.05 23:34
glaub das problem war das er dachte es wäre in msek anegeben wie wulfskin aber sagt ist es in sekunden angegeben
(ob das stimmt weiß ich jetzt nicht)
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 29.03.05 23:36
uall@ogc hat folgendes geschrieben: | glaub das problem war das er dachte es wäre in msek anegeben wie wulfskin aber sagt ist es in sekunden angegeben
(ob das stimmt weiß ich jetzt nicht) |
Auch Sekunden würde nicht passen. Ich kann mir nicht vorstellen, dass das Repaint nur Sekunden dauert - da könnt ich ja 10 Mal repainten bevor mein Flachbildschirm einmal das Bild neu aufbaut ^^. Und so optimiert ist der Code nicht wie Ben schon bemerkt hat
AXMD
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 30.03.05 00:49
Genaueres zur Memleak findet ihr hier:
www.delphi-forum.de/....php?p=235247#235247
Der dort auftretende Fehler beläuft sich in NUR 10 Performance-Tests auf gut 90ms Mehraufwand, den die Routine braucht.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 30.03.05 00:51
dachte du bekommst ne 1 raus hast ja net genau gepostet ^^
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
AXMD 
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 30.03.05 08:48
uall@ogc hat folgendes geschrieben: | dachte du bekommst ne 1 raus hast ja net genau gepostet ^^ |
Ich hab geschrieben AXMD hat folgendes geschrieben: | 1000 * Result ~ 1,1 |
. Ergo Ist Result ~ 1,1 / 1000 (zumindest laut meinen mathemetischen Kenntnissen  )
AXMD
|
|
|