Langsames Programm
-
Ich habe eine Art "Aquarium" programmiert, und in diesem "Aquarium" wird alle 3-7 sec ein neuer Fisch per pictureBox erstellt. Zwei Timer mit dem Interval 50ms steuern alle Fische entweder von links nach rechts oder von rechts nach links (Position der pictureBox wird jedes Mal um 5 erhöht oder erniedrigt). Jetzt hab ich nur das Problem, dass die CPU-Auslastung beim Ausfürhen auf 80% hochgeht und das Programm deshalb sehr hängt, dabei werden die pictureBoxen gelöscht, wenn sie über den Rand hinausgehen. Wenn mal kein Fisch zu sehen ist, geht die CPU-Auslastung auch wieder fast auf 0%. Aber was kann ich machen, um die CPU-Auslastung so tief wie möglich zu halten. Einige Programme bewegen hunderte Objekte gleichzeitig und die CPU-Auslastung kratzt nichtmal die 50% an.
-
Anstatt der PictureBoxen zeichne am besten die Bilder (Fische) in der Paint-Ereignismethode selber mittels Graphics.DrawImage().
Und im Timer dann einfach Invalidate() oder Invalidate(rect) aufrufen.
Lies dir dazu mal diesen Artikel durch: [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox).
-
Hm... ja, CPU-Auslastung bleibt zwar jetzt unten, aber dafür hab ich jetzt ein Flackern bei den Bildern, sogar noch ab 1000ms, was ich, wenn ich ehrlich bin noch viel unschöner finde.
-
Hast du dir die Links unter dem Artikel von Th69 namenlich "[FAQ] Flackernde Controls vermeiden / Schnelles, flackerfreies Zeichnen" durchgelsenen?
z.B.: http://www.mycsharp.de/wbb2/thread.php?threadid=59978 ?
-
Rhombicosidodecahedron schrieb:
Hast du dir die Links unter dem Artikel von Th69 namenlich "[FAQ] Flackernde Controls vermeiden / Schnelles, flackerfreies Zeichnen" durchgelsenen?
z.B.: http://www.mycsharp.de/wbb2/thread.php?threadid=59978 ?Nein, hatte ich noch nicht.
Hab DoubleBuffered auf true gesetzt und das Flackern ist jetzt weg.