TSRE CZ

Do kódu jsem přidal upravený settings.txt, který se vám vytvoří po spuštění .exe. Nedoporučuji ho používat v jiných verzích TSRE, protože je přizpůsobený mému kódu.

UPOZORNĚNÍ: Všem, kteří si včera stáhli můj program, se nabídne aktualizace na verzi 1.0.1 – tu NESTAHUJTE. Není ještě otestovaná a pokud nemáte zálohu, je nevratná!

Kód:
# ==================================================
# TSRE CZ – upravené nastavení
# --------------------------------------------------
# Toto nastavení je přizpůsobeno pro verzi TSRE CZ.
# V jiných verzích TSRE nemusí fungovat správně.
# --------------------------------------------------
# Doporučení:
# - Používej tento soubor pouze s TSRE CZ
# - Před úpravami si vytvoř zálohu
# ==================================================

consoleOutput = false

# ==================================================
# ZÁKLADNÍ NASTAVENÍ
# ==================================================

# Hlavní složka hry
gameRoot = F:/train simulator

# Výchozí trať po spuštění
routeName = asdasasdasd1233

# Výchozí startovní tile
#startTileX = -5306
#startTileY = 14961

# Cesta k geo datům
geoPath = F:/hgst

# ==================================================
# EDITOR TRATÍ
# ==================================================

# Povolit ukládání změn
writeEnabled = true

# Povolit zápis do databáze kolejí
writeTDB = true

# Ponechat shape koleje i po smazání koleje
leaveTrackShapeAfterDelete = false

# Přichycení objektů pouze rotací
snapableOnlyRot = false

# Ignorovat chybějící global shapes
ignoreMissingGlobalShapes = true

# Načíst aktivity pro kontrolu chyb
loadActivities = true

# Načíst celou trať pro kontrolu chyb
loadAllWFiles = true

# ==================================================
# KAMERA
# ==================================================

# Používat NumPad
usenNumPad = true

# Zorné pole kamery
cameraFov = 45

# Kamera se drží nad terénem
cameraStickToTerrain = true

# Citlivost myši
mouseSpeed = 0.1

# Rychlosti pohybu kamery
cameraSpeedMin = 1
cameraSpeedStd = 3
cameraSpeedMax = 10

# ==================================================
# ZOBRAZENÍ A VÝKON
# ==================================================

# Počet okolních tile
tileLod = 1

# Vzdálenost vykreslování objektů
objectLod = 2000

# Načítání objektů
maxObjLag = 10
allowObjLag = 1000

# Stíny
shadowsEnabled = 0

# Mapové podklady
imageMapsUrl =

# Anti-aliasing
#AASamples = 16

# Kvalita textur
#textureQuality = 4

# QuadTree renderer
#useQuadTree = false

# Mlha
#fogColor = #D0D0FF
#fogDensity = 0.5

# ==================================================
# VZHLED A ROZLOŽENÍ
# ==================================================

# Motiv systému
#systemTheme = true

# Barva pozadí náhledu soupravy
#colorConView = #A2A2A2

# Barva pozadí náhledu modelu
#colorShapeView = #A2A2A2

# Skrýt nástroje
#toolsHidden = true

# Rozložení hlavního okna
#mainWindowLayout = W

# Rozložení editoru souprav
#ceWindowLayout = C1

# Tloušťka čar
#oglDefaultLineWidth = 2

# ==================================================
# EDITOR SOUPRAV
# ==================================================

# Výška náhledu soupravy v editoru (px)
# Menší = víc místa pro seznam, větší = větší náhled
consistPreviewHeight = 150

loadConsists = true

# ==================================================
# OSTATNÍ
# ==================================================

# Imperiální jednotky
#useImperial = false

# Výchozí výška při vkládání objektů
#defaultElevationBox = 0

# Výchozí krok pohybu objektů
#defaultMoveStep = 0.25

# Velikost mapových obrázků
#mapImageResolution = 2048

# Velikost shadow mapy
#shadowMapSize = 8192

# ==================================================
# ULOŽENÉ NASTAVENÍ PROGRAMU
# (automaticky generováno – neměň ručně)
# ==================================================
ceWindowLayout = C1
 
Do kódu pro mé testování (ve veřejné verzi tohle měření nebude) jsem přidal měření, jak dlouho trvá načtení .eng a .wag souborů. U mě při 200 GB trainsetu to trvalo dvě minuty, ale problém je v tom, že ještě přibližně další dvě minuty trvá, než se vše poskládá do okna programu a následně načte.

Proto dělám další měření pro ConEditorWindow.cpp, abych zjistil, co konkrétně zpomaluje následné spuštění okna. Po tomto testu už budu vědět, jestli bude stačit jen cache, nebo bude potřeba nějaká optimalizace přímo v kódu.

Pak se vrhnu na načítání Editoru tratí.

mereni.jpg
 
Omlouvám se za časté obrázky, ale každou změnu musím nejdřív sestavit a následně otestovat, jinak to bohužel nejde

Níže je ukázka, že cache funguje správně:
  • "Čtení z cache: 82 172 položek"
  • "Nově načtené soubory: 0"
To znamená, že v trainsetu nedošlo k žádné změně, a proto nebylo nutné znovu načítat žádné soubory.

Pokud se v trainsetu provede změna, načtou se pouze upravené soubory a zároveň se aktualizují v cache.

cache2.jpg
 
to jsem v pohodě, neznám velikost Trainsetu, ale včera asi 20 minut.. Záleží na PC a to dost podstatně.
 
to jsem v pohodě, neznám velikost Trainsetu, ale včera asi 20 minut.. Záleží na PC a to dost podstatně.
To je v pořádku, výkon PC samozřejmě hraje velkou roli. Nejde ale jen o počítač, ale i o to, jak je řešený samotný kód.

Editor souprav při startu načítal Eng List 1 i Eng List 2 současně, i když druhý seznam uživatel vůbec nemusel mít zapnutý. Tím se část práce dělala zbytečně dvakrát.

To jsem upravil tak, aby se Eng List 2 načítal jen tehdy, pokud je opravdu povolený v nastavení. Spolu s cache pro .eng/.wag to výrazně zrychluje opakované spuštění.

Jen bych poprosil, aby se zbytečně nesoudilo „od oka“, že je problém jen ve výkonu PC. Část věcí se dá skutečně vyřešit úpravou kódu, což se tady potvrdilo.
 
Přidávám další informaci k vývoji TSRE CZ.

Do kódu jsem nově přidal měření času otevření Editoru souprav, které používám pro testování výkonu při různých úpravách.

Níže přikládám srovnání:
  • bez cache
  • s aktivní cache
Jak je vidět z obrázků, rozdíl je výrazný.

Cache nyní funguje tak, že při opětovném spuštění načítá pouze změněné soubory, ostatní bere přímo z uložených dat, což výrazně zrychluje start programu.

Zároveň jsem upravil načítání Editoru souprav tak, aby se zbytečně nenačítaly části, které nejsou aktivní (např. druhý seznam vozidel).

A jen pro upřesnění – tyto úpravy nejsou „náhodné pokusy“. Přesně vím, co dělám, jinak bych do toho vůbec nezasahoval

Níže jsou ukázky výsledků:

Bez cache
bezcache.jpg

S cache
scache.jpg
 
Dovolil jsem si veleváženému @Tygy poslat soukromou zprávu, aby nepsal bludy k mým příspěvkům ohledně úprav v kódu. Podle jeho slov cpu do kódu jen voloviny, které vůbec nic neřeší :-D Takže asi tak!

Nikoho nenutím, aby používal mou verzi TSRE. Primárně dělám to, o co mě požádali samotní uživatelé, a pokud bych zjistil, že to nedává smysl, tak bych to určitě nedělal!

A upřímně… kdyby to šlo a dal si tam, že po kliknutí mi vyskočí z obrazovky slečna, která mě začne uspokojovat, je to čistě má věc!

Po otázce, jestli vůbec ví, jak funguje cache, odepsal toto: „Mně je to fuk, jak funguje cache. A ani jsem zatím o verzi TSRE5 z tvojí dílny neuvažoval.“

zprava.jpg
 
Dobře, žes to zveřejnil. Nemusím nic komentovat. Na rozdíl od někoho mě to neuráží a navíc to nebylo myšleno ani jako urážka. Tvoje věc, jak sis to přebral.
Zatím jsem tu neviděl žádné vyjádření od uživatelů, které by hned reagovalo na Tvé příspěvky a pokaždé, když Ti někdo začal alespoň trochu oponovat, Vyletěl jsi jako papírový čertík z krabičky. Já jsem v klidu, Tvou pomoc asi potřebovat nebudu a Ty nečekej nic ode mě. Tím tuto věc považuji za vyřízenou. :cool:;)
 
Dobře, žes to zveřejnil. Nemusím nic komentovat. Na rozdíl od někoho mě to neuráží a navíc to nebylo myšleno ani jako urážka. Tvoje věc, jak sis to přebral.
Zatím jsem tu neviděl žádné vyjádření od uživatelů, které by hned reagovalo na Tvé příspěvky a pokaždé, když Ti někdo začal alespoň trochu oponovat, Vyletěl jsi jako papírový čertík z krabičky. Já jsem v klidu, Tvou pomoc asi potřebovat nebudu a Ty nečekej nic ode mě. Tím tuto věc považuji za vyřízenou. :cool:;)
Jakou pomoc bych měl od tebe čekat? Jen informace, že ti nehoří malta a podobně? :-D Pobavil jsi mě!

Uživatelé mi píšou do soukromých zpráv. Mrzí mě to, ale bohužel s tím nic neudělám.
 
Já - dělník, používám výrazy dělnické třídy, Ty - technolog a IT používáš výrazy pracující inteligence. Proto si nerozumíme a tím pádem nevíš, co ten výraz znamená. Jednou u piva Ti to vysvětlím. Já jsem v pohodě, Ty buď taky.
 
Pro @Tygy a ostatní přikládám ukázkové video se srovnáním načítací doby mé verze TSRE a oficiální verze 0.7.625.

Jak je vidět, díky cache je úspora času načítání opravdu výrazná :-)

Samozřejmě výkon počítače má na rychlost vliv, ale rozdíl mezi načítáním bez cache a s cache je patrný i tak.

Těch prázdných řádků si nevšímejte – consisty nemají názvy :-D

 
Poslal jsem jednomu uživateli poslední sestavení na otestování, protože uváděl načítání trainsetu přes 30 minut.

Po vytvoření cache se mu opakovaný start zkrátil na něco málo přes minutu.

Každý si z toho může udělat obrázek sám, jestli cache pomáhá

Bez cache
bezc.jpg

S cache
sc.jpg
 
Ahoj,

mám pro vás další konkrétní posun v rychlosti načítání tratí v TSRE CZ.

Podařilo se mi výrazně zrychlit načítání .w souborů (world), což je u větších tratí největší žrout času. Nejde o žádné „placebo“, ale o reálnou úpravu způsobu, jakým se soubory zpracovávají.

Co bylo špatně​


Původní kód při načítání každého jednoho .w souboru volal:

QCoreApplication:: processEvents(...)

Tohle sice zajišťuje, že program „nepůsobí jako zamrzlý“ (neobjeví se „Neodpovídá“), ale zároveň to znamená, že se při každém souboru přepíná do GUI a zpět. U tisíců souborů to dělá obrovský overhead.

Co jsem upravil​


Volání jsem omezil pouze na každý 20. soubor:

if(i % 20 == 0) QCoreApplication:: processEvents(...)
Výsledek:
  • program stále reaguje (okno se nepřestane překreslovat)
  • ale nevzniká zbytečné zpomalení

Další úprava​


Do settings.txt jsem přidal možnost:

checkRouteDatabase = true / false

Tahle funkce provádí kontrolu databáze tratě (TDB/RDB), což je časově náročná operace a pro běžnou práci v editoru není nutná při každém spuštění.
  • true = provede kontrolu (pomalejší start)
  • false = přeskočí (rychlejší start)

Reálné výsledky​


Na velké trati:
  • původně: cca 12 minut
  • po úpravách: cca 1:30 min
Takže si udělejte obrázek sami, jestli to „něco dělá“

Nejde o žádné magické zrychlení podle výkonu PC, ale o opravu neefektivního chování v kódu.

Kdo chce maximální rychlost, může si v settings.txt vypnout kontrolu databáze. Kdo chce kontrolu, nechá zapnuté.

Další testy ještě probíhají, ale tenhle rozdíl je už teď dost zásadní.
 
Srovnávací video načítání tratí mé verze TSRE CZ a oficiální verze 0.7.625. Má verze se načte za minutu, zatímco oficiální až za 8 minut.

U tratí nebylo nutné dělat cache, ale upravit samotný kód tak, aby zbytečně nevolal funkci, která není potřeba a slouží jen k tomu, aby program nevypisoval „Neodpovídá“ :-) Funkci popisuji ve svém starším příspěvku.

Tady vážně nezáleží jen na výkonu počítače.

 
Back
Nahoře