AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Canvas und CPU Auslastung
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas und CPU Auslastung

Ein Thema von Blamaster · begonnen am 25. Jul 2014 · letzter Beitrag vom 28. Jul 2014
Antwort Antwort
Seite 2 von 2     12   
hathor
(Gast)

n/a Beiträge
 
#11

AW: Canvas und CPU Auslastung

  Alt 27. Jul 2014, 10:53
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#12

AW: Canvas und CPU Auslastung

  Alt 27. Jul 2014, 11:25
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#13

AW: Canvas und CPU Auslastung

  Alt 27. Jul 2014, 23:13
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.
Angehängte Dateien
Dateityp: zip Wave demo.zip (391,8 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#14

AW: Canvas und CPU Auslastung

  Alt 27. Jul 2014, 23:43
Wenn ich das richtig sehe, wird innerhalb des Timer-Events durch PB.Flush ein Neuzeichnen ausgelöst. Vielleicht hilft es ja, dort stattdessen ein PB.Invalidate einzusetzen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.581 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Canvas und CPU Auslastung

  Alt 28. Jul 2014, 07:16
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, ...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#16

AW: Canvas und CPU Auslastung

  Alt 28. Jul 2014, 15:01
@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 ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
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