Timer + Performance

Norbert Eder

Erfahrenes Mitglied
Folgende Problemstellung:

In einer Applikation werden Templates eingelesen, die angezeigt werden. Aufgrund dieser Templates werden Controls zusammengestellt und auf einer Form positioniert.

Nun ist es so, dass dies unter anderem auch ein von mir entwickeltes Marquee (Scroll-Text) Control betrifft. Das Scrollen wird per System.Windows.Forms.Ticker gepollt. Die Schrittweite des Scrollens (Anzahl der Pixel pro Tick) wird vom Template bestimmt (Default-Wert = 1 Pixel / Tick), ebenfalls die Anzahl der Millisekunden.

Problematisch ist es nun, dass das Control ca. 95% Prozessorlast verursacht, was mir schon ein wenig viel vorkommt. Eingestellt ist eine Schrittweite von 1 Pixel und Ticks alle 100 Millisekunden.

Gibts hier ne Möglichkeit dies zu optimieren? Ich hoffe es kann sich jetzt mal jeder vorstellen wie dies ungefähr aussieht und wo genau das Problem liegt.

lG;
Norbert
 
Vielleicht hiltfs wenn du dir deinen eigenen Timer Thread bastelst.
Also einen neuen Thread erstellen und das timer coding dann in die vom Thread aufgerufenen Methode reinpacken. Dann noch eine Schleife reinpacken und in die Schleife ein Thread.Sleep(100) ans Ende packen, damit du deinen Intervall drin hast... Eventuell dann noch die ThreadPriority auf Lowest oder so setzten.

Ist jetzt nur so eine Idee von mit, eventuell funktioniert es ja...

:edit:

Ich habe aber die Vermutung das dein coding im timer eine so hohe CPU Last zur Folge hat. Am Timer liegts ja eigentlich nicht...
 
Zuletzt bearbeitet:
du könntest ja auch 100 Pixel in einer Millisekunde machen, oder 50 in einer.
Es macht in diesen kleinen Zeiten fast keinen Unterschied.
 
Hi.

Schau mal ob es performanter ist, wenn du einen Thread hast, welchen du dann immer schlafen legst für die kurze Zeit.
Im System.Timer Namespace gibts ja auch noch einen Timer, der dürfte eventuel auch besser sein als der in System.Windows.Forms.

Mfg,
Alex
 
Original geschrieben von woni
du könntest ja auch 100 Pixel in einer Millisekunde machen, oder 50 in einer.
Es macht in diesen kleinen Zeiten fast keinen Unterschied.

Dann würde ich aber sagen 10 Pixel pro Sekunde, denn er will ja einen Pixel in 100 ms machen. Aber das sollte bessere Performance bringen.
 
Vielen Dank für die Antworten. Werd mir mal den Vorschlag vom Alex genauer ansehen. Werd meine Ergebnisse dann testen.

Wenn jemand noch zusätzliche Vorschläge hat, einfach posten :)
 
Sodale, es hat zwar nicht unbedingt die Welt gebracht: statt 100% Auslastung fährts nun bei voller "Last" bei ca. 60 - 80% CPU-Auslastung, hat allerdings den Vorteil, dass die Software nun auf andere Anwedungen "reagieren" kann und im Notfall ein wenig skaliert. Ist schon mal nicht schlecht.
 
Da ist die Schrittweite zu hoch, das is ja das Problem. ich kanns ehrlich gesagt net viel ändern. Wie gesagt, es liegt ein Template-System und da kann mans dann sowieso einstellen wie mans braucht und ich teste hier einfach mal den extremen Fall.
 
Zurück