Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern? (https://www.delphipraxis.net/177745-programm-verbraucht-zuviel-prozessorleistung-wie-kann-ich-lag-verhindern.html)

Astobix 25. Nov 2013 14:45

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Schonmal vielen Dank für die Tipps/Hilfe! Ich probiere das dann mal aus.

Einige Fragen sind mir aber noch geblieben:

1. Die Frage mit dem Doublebuffering. Sobald ich es auf true setzte, verdoppelt sich fast die benötigte ProzessorLeistung. Wenn ich es auf false belasse, flimmert alles. Gibt es Alternativen, die weniger Ressourcen kosten, aber trotzdem das Flimmern verhindern?

2. Ich habe mich noch nicht wirklich mit Threads auseinandergesetzt, würde es irgendeinen Vorteil bringen, das Programm in mehrere Threads aufzuteilen? Kann man damit das Programm auf mehrere Kerne aufteilen - und ist das sinnvoll?

Sir Rufo 25. Nov 2013 14:49

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
  1. Logisch, denn jede Veränderung veranlasst das System den Bildschirm neu zu zeichnen. Beim DoubleBuffer sogar jeweils doppelt.
    Benutze keine Komponenten, sondern zeichne alles selber auf ein Bitmap. Wenn du mit dem Bitmap fertig bist, dann zeichne dieses Bitmap auf die Form -> Das System muss jetzt nur einmal neu zeichnen.
  2. Die Threads werden dir bislang noch nicht weiterhelfen, denn der größte Aufriss ist das Zeichnen auf dem Bildschirm und der darf eh nur synchronisiert im Hauptthread erfolgen.

Popov 25. Nov 2013 15:03

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1237349)
@Popov

Genau so macht man das eben nicht.

Das will ich dir glauben, aber sieh mal - ich habe einen einfachen Rechner und gelegentlich installiere ich einen 3D Egoshooter, der für meinen Rechner einfach zu neu ist. Ergebnis, ich bekomme in einer Sekunde mal ein Frame zu sehen. Nun könnte man meinen, dass der edle Krieger für die 100 Meter deshalb 100 Sekunden braucht, denn wenn nichts angepasst wird, dann müssen alle Frames abgespielt werden.

Passiert eben nicht. Was ich sehe ist ein Frame pro Sekunde und den edlen Krieger in 10 Meter Abständen (vorausgesetzt er läuft die 10 Meter in einer Sekunde).

Das Spiel läuft also in Realtime ab. Und nichts anderes habe ich geschrieben. Entweder läuft das Spiel in Zeitlupe ab oder es hackt, weil es in Realtime abläuft. Vielleicht habe ich das falsch ausgedrückt, hab aber das richtige gemeint. Das Problem ist nur, dass man nicht überall immer eine Welt Engine hat, so dass man sich nach Abstand richten kann.

Sir Rufo 25. Nov 2013 15:09

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Zitat:

Zitat von Popov (Beitrag 1237360)
Zitat:

Zitat von Sir Rufo (Beitrag 1237349)
@Popov

Genau so macht man das eben nicht.

Das will ich dir glauben, aber sieh mal - ich habe einen einfachen Rechner und gelegentlich installiere ich einen 3D Egoshooter, der für meinen Rechner einfach zu neu ist. Ergebnis, ich bekomme in einer Sekunde mal ein Frame zu sehen. Nun könnte man meinen, dass der edle Krieger für die 100 Meter deshalb 100 Sekunden braucht, denn wenn nichts angepasst wird, dann müssen alle Frames abgespielt werden.

Passiert eben nicht. Was ich sehe ist ein Frame pro Sekunde und den edlen Krieger in 10 Meter Abständen (vorausgesetzt er läuft die 10 Meter in einer Sekunde).

Das Spiel läuft also in Realtime ab. Und nichts anderes habe ich geschrieben. Entweder läuft das Spiel in Zeitlupe ab oder es hackt, weil es in Realtime abläuft. Vielleicht habe ich das falsch ausgedrückt, hab aber das richtige gemeint. Das Problem ist nur, dass man nicht überall immer eine Welt Engine hat, so dass man sich nach Abstand richten kann.

Ja du hast wohl das richtige gemeint, allerdings ist die FPS die Resultierende daraus und nicht das, was man zur Berechnung nimmt ;)

Popov 25. Nov 2013 15:58

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Das stimmt, nur hat man wie gesagt nicht immer eine Welt bei der man sich an Zeiten oder Abstand orientieren kann. Das mit FPS ist ein kleiner Trick den ich mal ausprobiert habe und der eigentlich gut klappt.

Sir Rufo 25. Nov 2013 16:54

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Zitat:

Zitat von Popov (Beitrag 1237369)
Das stimmt, nur hat man wie gesagt nicht immer eine Welt bei der man sich an Zeiten oder Abstand orientieren kann. Das mit FPS ist ein kleiner Trick den ich mal ausprobiert habe und der eigentlich gut klappt.

Hast du da mal ein Beispiel?

Eigentlich geht es bei Geschwindigkeit immer um Strecke pro Zeiteinheit.

Popov 25. Nov 2013 17:39

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Hatte ich. Ich hab mal ein kleines Spiel für zwischendurch programmiert, bzw. bin immer noch dabei (mit langen Pausen dazwischen). Etwas belangloses was man im Büro in der Mittagspause spielen kann. Das spezielle an dem Programm war, dass da plötzlich paar tausend Objekte auf dem Bildschirm rumschwirren konnten (theoretisch). Das höchste bei einem Test waren 15.000 Bitmaps. Das ergab 5 FPS. D. h. in 1/5 Sekunde wurden 15.000 Bitmaps in die Zielbitmap kopiert.

Nicht dass das normal war, aber es konnte passieren. Das Programm lief bei 5 FPS somit in Zeitlupe ab, so dass man plötzlich keine Probleme hatte die seine Abschüsse zu machen. Also habe ich das so umprogrammiert wie ich es oben geschrieben habe.

Funktioniert hat es, nur war ich damit trotzdem nicht glücklich. Also habe ich das Programm komplett neu geschrieben und dieses mal richtig optimiert, so dass ich jetzt 225.000 Objekte brauche um auf 5 FPS zu kommen (ich hab es tatsächlich gemessen).

Auf was ich hinaus will: es hat funktioniert, nur habe ich den Code nicht mehr. In der neuen Version habe ich auf Bitmaps verzichtet und die Objekte gezeichnet. Das geht schneller.

Aber was ich geschrieben habe, funktioniert.

Sir Rufo 25. Nov 2013 17:58

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Ok, evtl. löse ich die Probleme lieber auf direkte Art ;)

Popov 25. Nov 2013 20:42

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Das war einfacher als es sich anhört und hätte ich das nicht neu gemacht wäre das eine gute Idee gewesen.

Sir Rufo 25. Nov 2013 21:38

AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
 
Zitat:

Zitat von Popov (Beitrag 1237398)
Das war einfacher als es sich anhört und hätte ich das nicht neu gemacht wäre das eine gute Idee gewesen.

Das weiß ich, weil es in meinen Augen durch die Brust ins Auge ist ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz