Entwickler-Ecke
WinForms - Sporadische Performance-Probleme
Rolf1981 - Sa 09.06.12 13:21
Titel: Sporadische Performance-Probleme
Hallo zusammen,
ich arbeite seit einem halben Jahr an einem Projekt und habe hier schon mehrere wertvolle Tipps bekommen. Vielleicht hat mir auch dieses Mal jemand einen entscheidenden Hinweis.
Bei dem Projekt handelt es sich um ein Strategiespiel mit einer größeren Landkarte (10000 x 10000). Der Quellcode besteht im Grunde aus diesen Abschnitten
1. On Load
2. Timer 1(hier bewegen sich die Objekte und es finden alle Ereignisse statt, Intervall: 100)
3. Timer 2 (hier werden alle Ereignisse berechnet, die nicht so schnell aktualisiertw erden müssen, Intervall: 1000)
4. OnPaint-Ereignis (Objekte und der entspr. Teil der Landkarte werden gezeichnet)
Leider hatte ich Probleme damit, auf die Form direkt zu zeichnen. So reagierte z.B. das OnClick-Ereignis nicht mehr usw. Daher zeichne ich auf eine PictureBox. Ich weiß, dass das nicht ideal ist.
Nun treten sporadisch leider ziemliche Performance-Probleme auf. Merküwrdigerweise aber nur manchmal. Dies sieht dann so aus, dass man zuschauen kann, wie die Objekte nacheinander langsam gezeichnet werden. Nach ca. 1 Sekunde ist dann alles gezeichnet und es beginnt von vorne.
Wenn dies jedoch nicht auftritt, läuft alles wunderbar schnell und flüssig!
Es fällt mir gerade schwer, Quellcoe zu posten, da es sehr sehr umfangreich ist. Aber vielleicht hat trotzdem jemand einen Verdacht...
Danke schonmal!
Yogu - Sa 09.06.12 13:55
Stichwort Double Buffering: du zeichnest auf eine unsichtbare Bildflaeche (z.B. Bitmap), und wenn du damit fertig bist, diese Bildfläche auf das Formular bzw. die PictureBox. Dann sollte zumindest das flackernde Neuaufbauen verschwinden. Zur Performance: Schau mal in den Task-Manager, ob die CPUin den Zeiten mit schlechter Performance überdurchschnittlich hoch ausgelastet ist (vielleicht sogar durch ein anderes Programm?) Lasse dir auch die Zeit anzeigen, die die Timer-Routinen benötigen.
Eine bessere Grafikleistung würdest du auf jeden Fall durch OpenGL erhalten, z.B. mit dem Tao-Framework.
Grüsse,
Yogu
Rolf1981 - Sa 09.06.12 17:45
Hi,
danke für die Antwort!
DoubleBuffering ist bereits integriert, daran sollte es nicht liegen.
Die CPU-Auslastung liegt zwischen 20% und 40%, in beiden Fällen (wenn es flüssig läuft und wenn es Probleme gibt).
Wenn es einmal flüssig läuft, dann tut es dies auch die ganze Laufzeit über und zwar in jeder Situation und wirklich sehr flüssig! Wenn es jedoch nicht flüssig läuft, dann von Anfang an und die ganze Zeit über. Es hängt auch nicht von der Anzahl der Objekte etc. ab.
Yogu - So 10.06.12 22:53
Rolf1981 hat folgendes geschrieben : |
Dies sieht dann so aus, dass man zuschauen kann, wie die Objekte nacheinander langsam gezeichnet werden. Nach ca. 1 Sekunde ist dann alles gezeichnet und es beginnt von vorne. |
Das hört sich aber gar nicht nach Double-Buffering an.
Hast du dir die Timer-Durchlaufzeiten mal angesehen?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!