Andreas-Kreuz / ak-lua-bibliothek-fuer-eep

Lua-Bibliothek für EEP - Verkehrssteuerung und mehr - von Andreas Kreuz
https://andreas-kreuz.github.io/ak-lua-bibliothek-fuer-eep/
MIT License
2 stars 7 forks source link

Performance: Züge aktualisieren dauert zu lange -- sollte optimiert werden #57

Closed Andreas-Kreuz closed 4 years ago

Andreas-Kreuz commented 4 years ago
21:26:43 ModuleRegistry.initTask() 0.053 Sekunden fuer "ak.data.DataLuaModule"
21:26:43 ServerController: initialize()
21:26:43 ServerController: initialize() 0.00 Sekunden fuer "ak.data.TimeJsonCollector"
21:26:43 ServerController: initialize() 0.00 Sekunden fuer "ak.core.ModulesJsonCollector"
21:26:43 ServerController: initialize() 0.04 Sekunden fuer "ak.data.TrainsAndTracksJsonCollector"
21:26:43 ServerController: initialize() 0.00 Sekunden fuer "ak.data.DataSlotsJsonCollector"
21:26:43 ServerController: initialize() 0.00 Sekunden fuer "ak.data.SignalJsonCollector"
21:26:43 ServerController: initialize() 0.00 Sekunden fuer "ak.data.SwitchJsonCollector"
21:26:43 ServerController: initialize() 0.00 Sekunden fuer "ak.core.VersionJsonCollector"
21:26:43 ServerController:collectData() 0.00 Sekunden fuer "ak.data.TimeJsonCollector"
21:26:43 ServerController:collectData() 0.00 Sekunden fuer "ak.core.ModulesJsonCollector"
21:26:43 ServerController:collectData() 0.06 Sekunden fuer "ak.data.TrainsAndTracksJsonCollector"
21:26:43 ServerController:collectData() 0.00 Sekunden fuer "ak.data.DataSlotsJsonCollector"
21:26:43 ServerController:collectData() 0.00 Sekunden fuer "ak.data.SignalJsonCollector"
21:26:43 ServerController:collectData() 0.00 Sekunden fuer "ak.data.SwitchJsonCollector"
21:26:43 ServerController:collectData() 0.00 Sekunden fuer "ak.core.VersionJsonCollector"
21:26:43
auxiliary-rolling-stock-infos-dynamic: 376 b
auxiliary-rolling-stocks: 763 b
auxiliary-tracks: 4709 b
auxiliary-train-infos-dynamic: 391 b
auxiliary-trains: 336 b
control-rolling-stock-infos-dynamic: 2 b
control-rolling-stocks: 2 b
control-tracks: 2 b
control-train-infos-dynamic: 2 b
control-trains: 2 b
eep-version: 126 b
free-slots: 10435 b
modules: 185 b
rail-rolling-stock-infos-dynamic: 21948 b
rail-rolling-stocks: 50263 b
rail-tracks: 22875 b
rail-train-infos-dynamic: 3989 b
rail-trains: 4202 b
road-rolling-stock-infos-dynamic: 3277 b
road-rolling-stocks: 6878 b
road-tracks: 47168 b
road-train-infos-dynamic: 2593 b
road-trains: 2727 b
save-slots: 4758 b
signals: 6888 b
switches: 6971 b
times: 72 b
tram-rolling-stock-infos-dynamic: 2 b
tram-rolling-stocks: 2 b
tram-tracks: 2 b
tram-train-infos-dynamic: 2 b
tram-trains: 2 b
waiting-on-signals: 1599 b
21:26:43 MIT INITIALISIERUNG: ServerController.communicateWithServer() time is 0.30 s --- waitForServer: 0.00 s, initialize: 0.09 s, processNewCommands: 0.00 s, collectAndWriteData: 0.21 s(allowed: 0.20 s)
21:26:43 ServerController:collectData() 0.05 Sekunden fuer "ak.data.TrainsAndTracksJsonCollector"
FrankBuchholz commented 4 years ago

Some observations:

a) initialize() Maybe we can invent a module option MAX_TRACKS to reduce the default value 50000 which is used to call EEPRegisterAuxiliaryTrack, EEPRegisterControlTrack, EEPRegisterRoadTrack, EEPRegisterRailTrack, and EEPRegisterTramTrack.

b) collectData() Currently updateTracksBy() is called 5 times for different track types but checks all registered tracks in each call. Something similar happens for for _, trainsInfo in ipairs(data[trainInfos]) do which is executed 5 times, too.

Andreas-Kreuz commented 4 years ago

Ich will sowieso mal da ran, da das ein Engpass ist und der Code nicht optimal. Das Wochenende wird aber sich noch für den Server draufgehen. Ich überlege auch die Züge nur einmalig zu suchen und dann nur noch in den Kontaktpunkten zu erkennen, ob neue Züge auf den Anlagen sind. Auch hatte ich eine Funktion gesehen, die Züge beim Verlassen von "Trainyards" erkennt. Damit zusammen sollten sich irgendwann alle bekannten Züge eingefunden haben, man muss sie sich nur die ganze Zeit merken.