Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 29.03.05 23:36 
user profile iconuall@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
Zitat:
0,00169[..]
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 30.03.05 08:48 
user profile iconuall@ogc hat folgendes geschrieben:
dachte du bekommst ne 1 raus hast ja net genau gepostet ^^


Ich hab geschrieben
user profile iconAXMD hat folgendes geschrieben:
1000 * Result ~ 1,1
. Ergo Ist Result ~ 1,1 / 1000 (zumindest laut meinen mathemetischen Kenntnissen ;))

AXMD