Abfrage-Optimierung, CPU-Auslastung senken
Übersicht

MuckBetreff: Abfrage-Optimierung, CPU-Auslastung senken |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Muck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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+]
|
![]() |
ProfJakeehemals "DTC" / "Fabian Niemann" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Rallimen hat Folgendes geschrieben: dabei spielt es keine Rolle ob mh1 True oder False ist!
Ich dachte immer bei einer And ![]() ![]() 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 ![]() |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() |
ProfJakeehemals "DTC" / "Fabian Niemann" |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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. |
![]() |
ProfJakeehemals "DTC" / "Fabian Niemann" |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group