Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Canvas und CPU Auslastung (https://www.delphipraxis.net/181220-canvas-und-cpu-auslastung.html)

hathor 27. Jul 2014 09:53

AW: Canvas und CPU Auslastung
 
In älteren WINDOWS-Versionen - VOR VISTA - gab es den Desktop-Window-Manager noch nicht.

Zitat:
"Fewer repaint messages. When a window is obstructed by another window, the obstructed window does not need to repaint itself."

Repaint-Befehle laufen also ab VISTA in's Leere.

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

himitsu 27. Jul 2014 10:25

AW: Canvas und CPU Auslastung
 
Das heißt aber nur, daß Windows weniger Repaint-Nachrichten an das Programm sendet, da es ja noch das Bild im Cache hat.

Aber manuelle Nachrichten sollte diese Aussage nicht betreffen.
Das merke ich vorallem beim Firefox mit aktiver Hardwarebeschleunigung, welcher schnell mal den RDP fast lahmlegen kann, nur weil z.B. irgendwo ein winziges GIF abläuft.

Blamaster 27. Jul 2014 22:13

AW: Canvas und CPU Auslastung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es handelt sich um die Visualisierung von Audiofiles wie man sie aus Audio Schnittprogrammen kennt.

Ich habe das Beispiel mal angehängt (erfordert die Graphics32 lib zum compilieren). Das ständige neuzeichnen ist nötig um beim abspielen den Cursor für die aktuelle Abspielzeit auch bei größeren Zoomstufen flüssig durchlaufen zu lassen.

Eventuell habt ihr ja eine Idee wie man das besser machen könnte, bzw ob das grobe Schnitzer drin sind.

Uwe Raabe 27. Jul 2014 22:43

AW: Canvas und CPU Auslastung
 
Wenn ich das richtig sehe, wird innerhalb des Timer-Events durch
Delphi-Quellcode:
PB.Flush
ein Neuzeichnen ausgelöst. Vielleicht hilft es ja, dort stattdessen ein
Delphi-Quellcode:
PB.Invalidate
einzusetzen?

jaenicke 28. Jul 2014 06:16

AW: Canvas und CPU Auslastung
 
Unter Windows 8.1 ist das Problem übrigens mit der angehängten Exe nicht nachvollziehbar. Die Auslastung bleibt bei unter 1% egal was ich mache, abspielen, minimieren, ...

Blamaster 28. Jul 2014 14:01

AW: Canvas und CPU Auslastung
 
@Uwe Raabe

Hatte beide Varianten probiert und konnte keinen wirklichen Unterschied in der Performance feststellen.
Aber das "sofort" beim Flush hörte sich um Trägheit oder anstauen entgegenzuwirken erstmal besser an.

@jaenicke

Sofort tritt das Problem bei mir ja auch nicht ein. Erst wenn ich anfangen den PC mit anderen Programmen zu stressen macht sich das bemerkbar. Ist aber auch nicht so wirklich einfach zu reproduzieren es passiert halt irgendwann ohne das ich es durch eine konkrete Abfolge an Programmstarts/Aktionen zuverlässig reproduzieren könnte.

Eventuell liegt das Problem bei mir auch wirklich an meiner Windows Installation das muss ich nochmal auf einem anderen Rechner prüfen.

Trotzdem würde ich den Code gerne noch so weit wie möglich hinsichtlich der Repaint Operationen optimieren. Eine Sache ist schnell gemacht das betrifft das senden der Repaint Befehle nur dann wenn das Fenster auch wirklich sichtbar ist.

Ist es möglich nur bereichsweise neu zu zeichnen ? Das Spektrum im Hintergrund bleibt ja für längere Zeit gleiche (so lange bis der Cursor an den Bildrand kommt und weiter springt). In der Zwischenzeit werden im Endeffekt ja nur die kleinen Cursor gezeichnet.

Gibt es da eine performante Möglichkeit nur die Differenz zwischen altem und neuem Inhalt neu zeichnen zu lassen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Seite 2 von 2     12   

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