Abfrage-Optimierung, CPU-Auslastung senken

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Muck

Betreff: Abfrage-Optimierung, CPU-Auslastung senken

BeitragMi, Aug 06, 2008 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich würde gerne die CPU-Auslastung bei meinem Fußballmanager verringern. Momentan liegt die in den Menüs bei 20-60%, je nachdem wie viele Bilder gerade angezeigt werden. Habe das Gefühl, dass ich das nicht optimal programmiert habe. Leider bin ich aus den Threads hier auch nicht viel schlauer geworden, die einen sagen delay ist mist, der nächste sagt waittimer wäre langsam.

Momentan ist der Code nach folgendem Schema aufgebaut:

Code: [AUSKLAPPEN]
Function Credits_Auswahl()

   Repeat
      
      mh1 = MouseHit(1)
      
      If pos_x <> MouseX() Or pos_y <> MouseY() Then
         Credits_Screen()
         Flip 0
      EndIf
      
      pos_x = MouseX()
      pos_y = MouseY()
      
      WaitTimer (frameTimer)
      
      Musik_Abfrage()
      
   Until mh1 And ImageRectCollide (gfx_button0, 190, 665, 0, MouseX(), MouseY(), 1, 1) = 1

 
End Function




;---------------------------------------------------------------
; FUNCTION: CREDITS-SCREEN EINZEICHNEN
;---------------------------------------------------------------

Function Credits_Screen()


   DrawBlock gfx_bg_credits, 0,0
   
   Draw_Button (190, 665, "<< Zurück")
   
   SetBuffer ImageBuffer  (creditsbild)
   DrawBlock gfx_artwork, 0,0
   SetBuffer BackBuffer()
   DrawImage_Shadow creditsbild, 445,130, 10,75

   SetFont normal
   Color 218,218,118
   ; Text
   
   SetFont klein
   Color 255,255,255
   ; Text
   
   DrawImage gfx_mauszeiger, MouseX(), MouseY()


End Function



Den Timer hab ich auf 30 ms gesetzt, bei mehr ruckelt die Maus. Wäre super, wenn ihr mir Tipps zur Optimierung geben könntet! Vielleicht liegt es ja auch einfach daran, dass die Hintergründe zu groß sind (ca. 400 KB)?[/quote]
Latte! Fußballmanagement pur

Xeres

Moderator

BeitragMi, Aug 06, 2008 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten setzt man den Timer auf die Bildschirmaktualisierungsrate (z.B. für tft meist 60Hz). Bei deinem Beispielcode verstehe ich nicht ganz, was Flip da in der Mitte zu suche hat...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Muck

BeitragDo, Aug 07, 2008 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso, spielt das überhaupt eine Rolle? Hab es jetzt ans Ende gesetzt und timer auf 60, CPU-Auslastung liegt dennoch bei bis zu 40%...
Latte! Fußballmanagement pur

Eingeproggt

BeitragDo, Aug 07, 2008 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieviel Text schreibst du bei ";Text"?
Text ist nämlich ein verdammt lahmer Befehl. Optimierungsvorschläge:

-) Schreibe den Text beim Laden einmal in dein Credits-Bild und dann zeig nur noch das Bild, benutze also kein Text mehr.
-) Benutze SpeedText. Gibt es kostenlos im DLL & userlibs Forum und beschleunigt die Sache merklich.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Aug 08, 2008 0:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Until mh1 And ImageRectCollide (gfx_button0, 190, 665, 0, MouseX(), MouseY(), 1, 1) = 1

Schreib besser

Code: [AUSKLAPPEN]
   If mh1 Then
      If ImageRectCollide (gfx_button0, 190, 665, 0, MouseX(), MouseY(), 1, 1) = 1 Then Exit
   End If

Forever

da bei jedem Durchlauf deiner Until auch ImageRectCollide abgearbeitet wird!
dabei spielt es keine Rolle ob mh1 True oder False ist!

MfG ralf
[BB2D | BB3D | BB+]

ProfJake

ehemals "DTC" / "Fabian Niemann"

BeitragFr, Aug 08, 2008 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat Folgendes geschrieben:
dabei spielt es keine Rolle ob mh1 True oder False ist!

Ich dachte immer bei einer And Verknüpfung würde der zweite Wert nicht geprüft werden wenn der erste schon False ist.
Das ist meines Wissens eine der leichtesten Optimierungsarten, wäre schade wenn das bei Blitz nicht so wäre.

P.S.:
Code: [AUSKLAPPEN]

Until mh1 And ImageRectCollide(gfx_button0, 190, 665, 0, MouseX(), MouseY(), 1, 1)

Dieser Code reicht aus, man muss kein = 1 dahinter schreiben, da True 1 zurückgibt, dass nur mal als Hinweis am Rande.

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Aug 08, 2008 10:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat recht. Bei Blitz Basic hat Mark sich einen Haufen Optimierung gespart, der Code wird im Prinzip so übersetzt wie du ihn eingetippt hast.
Wenn du das nicht selber optimieren willst, musst du dann schon zu BlitzMax greifen Wink
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

ProfJake

ehemals "DTC" / "Fabian Niemann"

BeitragFr, Aug 08, 2008 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich dachte ich hätte das mal irgendwo gelesen, blitzbase.de oder im Buch von René Meyer.
Naja, ist jedenfalls Schade, auch wenn's mich nichts angeht, da ich nur BlitzMax programmiere.
 

Dreamora

BeitragFr, Aug 08, 2008 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
aMul hat Folgendes geschrieben:
Rallimen hat recht. Bei Blitz Basic hat Mark sich einen Haufen Optimierung gespart, der Code wird im Prinzip so übersetzt wie du ihn eingetippt hast.
Wenn du das nicht selber optimieren willst, musst du dann schon zu BlitzMax greifen Wink


stimmt so nicht ganz.
Blitz3D und Plus haben eine optimierung die BM zb nicht hat:
In Blitz3D / Plus fungieren IF const so wie #ifdef #else #endif in C, das heisst der teil des IF blocks der von der const bedingung nicht erreicht wird, wird garnicht erst mitkompiliert.

in BM fehlt diese optimierung, dafür hat BM early drops in den IF. Dies aber vor allem weil das notwendig war für BMs stabilität, denn ausser zahlen ist in BM alles ein Objekt und ohne early drops wär da durchgehend ein crash vorprogrammiert wenn man nicht if obj <> null and obj.name = "Test" machen könnte.

Es ist da allerdings anzumerken, das der compiler kern von Blitz3D / BlitzPlus irgendwo um die 6 Jahre alt ist (Blitz2D) und es wohl nicht mehr möglich war das nachher zu ändern ohne bestehende Codes inkompatibel zu machen.

BM ist allgemein effizienter beim generierten Output, dafür hat man auch viel eher probleme denn in BM gibts keine konsistenz codes mehr die dinge wie float = float ermöglichen (ist eigentlich komplett illegal, in BlitzPlus / Blitz3D jedoch kann man es weil mark dafür code integriert hat)

Von daher: beides hat vor und nachteile, kommt immer draufan wie viel ahnung man von programmierung hat.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

ProfJake

ehemals "DTC" / "Fabian Niemann"

BeitragFr, Aug 08, 2008 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
In Blitz3D / Plus fungieren IF const so wie #ifdef #else #endif in C, das heisst der teil des IF blocks der von der const bedingung nicht erreicht wird, wird garnicht erst mitkompiliert.

Wie gemein, sowas könnte ich, da ich großer Freund von Konstanten bin, sehr gut gebrauchen.
Ich wusste übrigens nicht, dass Blitz3D/BlitzPlus so etwas beherrschen, wo hast du das denn erfahren?

P.S.: Werden kleine Funktionen wie zum Beispiel
Code: [AUSKLAPPEN]
Function degToRad:Float(f:Float)
 Return f * (Pi / 180)
EndFunction

dann auch wie inline Funktionen in C++ behandelt?
 

Muck

BeitragMo, Aug 18, 2008 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Tipps. Hat doch einiges gebracht.

Allerdings hab ich jetzt ein neues Problem. Starte ich das Programm im Debug-Modus werd ich manchmal beim anfänglichen Laden von Bildern rausgehauen, manchmal klappt dann wieder alles. Question

Teilweise auch mit Meldung "Memory Acces Violation" bei LoadImage (Pfad geprüft, stimmt und ist auch bei jedem Spielstart gleich), teilweise ohne. Finde ich schon sehr verwirrend. Meint ihr das liegt an SpeedText, welches ich jetzt verwende, oder vielleicht an B3D? Habe vorher mit B+ kompiliert und benutze jetzt wegen SpeedText 3D. Dachte eigentlich, dass es deswegen keine Probleme geben sollte.
Latte! Fußballmanagement pur
 

Dreamora

BeitragMo, Aug 18, 2008 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
kann durchaus sein. hack dlls haben den hang probleme zu verursachen wenn der programmierer der sie schreibt nicht erfahren genug mit DX ist und mit states rumfriemelt und sie versaut.

Wegen der Optimierung: lernt man im verlauf von jahren irgendwann das da was war. Und nein Blitz macht kein Inlinde. wenn du inline willst in Blitz3D / BlitzPlus nimm gosub
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group