Vorsicht Performance-Falle
Zu viele geöffnete Fenster
Jedes Fenster, jedes Objekt und jede zusätzliche Einstellung in TrainController kostet - und zwar Rechenzeit. Manche Anwender unterliegen aber dennoch dem Irrtum, alles sei „gratis“ zu haben.
Es kommt dann häufiger vor, dass Anwender eine Vielzahl überflüssiger Fenster geöffnet haben. Oft sind es Lokführerstände, von denen dann 10, 20 oder gar mehr ebenso aufwändiges wie weitgehend sinnfreies Kino am Bildschirm veranstalten.
Und Anwender wundern sich dann, wenn TrainController irgendwann langsam reagiert.
Die eigentliche Aufgabe von TrainController besteht darin, den Betrieb auf der Modellbahn zu steuern. Die Bildschirmanzeige ist eigentlich zweitrangig. Zu viele unnötig geöffnete Fenster können aber Rechenleistung binden, die dann anderswo für wichtige Dinge fehlt. Dies gilt insbesondere für Lokführerstände und viele gleichzeitig fahrende Loks
Die Anzahl der gleichzeitig geöffneten Fenster (egal ob sichtbar oder verborgen !) sollte das absolut benötigte Mindestmaß nicht übersteigen. Wozu 20 Lokführerstände? Gibt es eine Notwendigkeit, überhaupt einen Lokführerstand dauerhaft geöffnet zu halten?
Wenn man eine bestimmte Lok beobachten möchte, so kann man schnell einen Führerstand öffnen, die Lok darin auswählen und verfolgen.
Möchte man sich das Öffnen sparen und immer wieder mal eine Lok mit der Hand steuern, so reicht dafür ein einziger ständig geöffneter Führerstand. Wussten Sie übrigens, dass man zumindest in TrainController Gold Lokfunktionen auch über das Hauptmenü ohne einen Lokführerstand schalten kann?
Wenn TrainController langsam reagiert, sollten Sie über das Register Fenster auf jeden Fall einmal prüfen, wie viele Fenster gerade geöffnet (sichtbar und verborgen) sind. Achten Sie dabei besonders auf eine vermeidbar hohe Anzahl von Lokführerständen, weil dies besonders oft falsch gemacht wird.
Endlosschleifen in Operationen
Mit folgender Endlosschleife in den Operationen von TrainController Gold kann man TrainController gut ausbremsen:
Marke Anfang:
… Operationen …
Abfrage Schleifende?
Sprung nach Ende.
Sprung nach Anfang.
Marke Ende:
…
Wird die Schleife zwischen der Marke „Anfang“ und der Abfrage des Schleifendes über einen langen Zeitraum hinweg viele Male wiederholt, so entsteht eine spürbare Last. Manchmal werden sogar Endlosschleifen, die über die gesamte Sitzung laufen sollen, so programmiert.
Bei solchen Schleifen sollte auf jeden Fall vor dem Rücksprung zum Schleifenbeginn eine angemessene Verzögerung eingefügt werden. Dies gilt insbesondere für beabsichtigte Endlosschleifen.
Also etwa so:
Marke Anfang:
… Operationen …
Abfrage Schleifende?
Sprung nach Ende.
Verzögerung 2000
Sprung nach Anfang.
Marke Ende:
…
Das wirkt bereits Wunder! Und gerade in Endlosschleifen ist dies unverzichtbar.
In zukünftigen Versionen wird folgende Absicherung eingebaut:
Wird in derselben Operationsliste der Sprung zu einer bestimmten Marke innerhalb eines bestimmten (kurzen) Zeitraums zu oft wiederholt, so wird die Ausführung der Operationsliste abgebrochen und eine Fehlermeldung im Meldungsfenster ausgegeben. Will man dies verhindern so muss man entweder die Anzahl der Schleifendurchläufe verringern oder eine angemessene Verzögerung zwischen zwei Durchläufen einfügen.
Unendlich oft wiederholter Start von Zugfahrten
Ein Anwender möchte am Anfang der Sitzung 10 beliebige Züge aus einem Schattenbahnhof ausfahren lassen, in dem 50 Züge bereitstehen.
Dazu startet er am Anfang der Sitzung in einer Schleife oder durch einen mehrfach ausgelösten Bahnwärter mehrfach die Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… für die Schattenbahnhofsausfahrt ohne Angabe eines Zuges. Die Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… wird so oft gestartet, bis zehn (beliebige) Züge losgefahren sind.
Dazu wird bei jedem erfolgreichen Start der Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… ein Zähler (z.B. in einer Variablenplugin-autotooltip__default plugin-autotooltip_bigVariablen in TrainController RailRoad & Co.
Variablen dienen dazu, Operationen, Bedingungen, Auslöser und viele andere Optionen flexibler gestalten zu können. Wird anstatt eines festen Wertes für eine Option eine Variable verwendet, so kann der Wert dieser Option während des laufenden Betriebs und passend zur aktuellen Situation auf der Modellbahn geändert werden.) um eins hochgezählt. Erreicht der Zähler 10, wird die Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… nicht mehr gestartet.
Alles richtig gemacht?
Nein!
Wehe nämlich, wenn sich die Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… am Anfang aus welchem Grund auch immer gar nicht starten lässt! Dann ergibt sich möglicherweise eine wunderbare Endlosschleife, weil der Zähler ja nicht hochgezählt wird. Und bei jedem Schleifendurchlauf wird 50 mal (vergeblich) versucht, die Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… mit je einem der 50 bereitstehenden Züge zu starten.
Dies kann sehr schnell zu tausenden vergeblichen Startversuchen führen und sogar das Programm fast lahmlegen. Wir haben gerade erst vor kurzem dieses Szenario bei einem Anwender beobachtet.
Wenn man also solch einen mehrmals wiederholten Startversuch einer Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… mit möglicherweise vielen bereitstehenden Zügen programmiert, so muss im Abbruchkriterium für die Wiederholungen nicht nur die Anzahl erfolgreicher Starts geprüft werden, sondern ob die Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… auch überhaupt einmal erfolgreich gestartet werden konnte.
Also im obigen Beispiel nach einem Start der Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… prüfen, ob der Zähler 0 ist oder mindestens 10. In beiden Fällen dann abbrechen.
In einer zukünftigen Version wird dies so abgesichert, dass der Start einer Zugfahrtplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… ohne Angabe von Zügen für eine gewisse Zeit gesperrt wird, wenn eine bestimmte Zahl von Versuchen innerhalb einer bestimmten Zeitspanne fehlgeschlagen ist. Der Start von Zugfahrtenplugin-autotooltip__default plugin-autotooltip_bigZugfahrten
* Anpassung an das Anfahrverhalten * Aufenthalt, Startverzögerungen und Beschleunigung * Beschreibung der Zugfahrt Regeln * Zugfahrt bwegt mit Kuppeln * Zugoperationen im TrainController * Die Mindest-Beschleunigungszeit in Zugfahrtregel * induphil-01-rundfahrt * induphil * Zugfahrten: Nachfolger * Operationen bei Start und Stop * Zugfahrt Pendelfahrt * Sind alle Blöcke und Strecken für die Zugfahrt markiert? * Unterbrechen des Betriebs – Beenden von Zugfahr… mit Vorgabe eines bestimmten Zuges ist hiervon nicht betroffen.
Original-Beitrag: https://www.freiwald.com/forum/viewtopic.php?f=5&t=38371