C# ban a GC.Collect() meghívása milyen esetekben használatos?
Van értelem egyáltalán,mert ha jól tudom akkor ez csak egy kérés a GC felé de nem biztos,hogy mindent felszabadít majd pont akkor mikor ezt meghívták.
Egy verekedős játéknál pl fontos hogy ne legyen megakadás a GC miatt szóval arra gondoltam hogy minden egyes lefutott harc után amikor a játékosok kiválassza egy pici menüben,hogy remach,vagy character select stb akkor hívnám meg rendszerességgel a GC.Collect() metódust.
Hogy érdemes csinálni?
Attól, mert te kézzel lefuttatod bármikor lefuthat megint amikor a rendszer azt mondja futnia kell. Nem attól lesz akadás, mert lefut a collector, hanem attól, ha nagyon sok szemetet gyártasz és gyakran sok szemetet kell gyűjtenie.
Semmilyen játéknál ne legyen akadás, nincs ez alól kivétel! FPS, stratégiai, logikai......ne legyen!
Unity-zel, vagy milyen motort használsz?
Én direktbe akkor nyomtam collectet, amikor teszteltem a memória használatot és a takarítást. Asseteket töltök be, JS parser engine-t hozok létre, scriptet futtatok stb. Egy AddOn rendszer, UIBuilder funkció amiből a UIBuildert, Asset kezelést én csináltam. Az utóbbi csak ideiglenesen összedobott cucc, azért teszteltem, ha 10x-100x újratöltöm a rendszert (0-ról fájból buildelve), akkor lássam milyen gyorsan takarít, tölt be újra és mennyi szemetet generál, nő e a memória használat.
Alapjáraton az a tanács, hogy ne futtasd, viszont ha olyan műveleteket futtattál ami után SOK-SOK szemét van és mondjuk egy betöltő képernyő végén szeretnél egy cleart, akkor az még beleférhet. Én inkább a szemét generálást próbálom elkerülni. Amit sok videóban nem látok, de lehet én nem ismerem az adott rendszerek poololását azért csinálom máshogy.
Godot engine ot használok c# al de váltani fogok gdscript re szerintem. Azért választottam a c# ot mert hasonlít szintaxisra a c++ hoz ,viszont c++ t mint script nyelvet a Godot nem támogatja sajnos.
Köszi a segit amúgy adtam zöldet.
A C++ nem script nyelv :)
Én a helyedben megnézném performancia szempontjából melyik a jobb (GDScript, vagy C#) és azt választanám amelyik jobban szerepel.
Én Unity C#, JS (nem Unity-s JS hanem addon rendszerhez JINT engine, mondhatni egy plugin a Unitybe). Még akarok majd LUA-t, mert az állítólag nagyon gyors parser szempontból ami hasznos tud lenni ugye.
A laggspike-okat el tudod kerülni úgy is, ha jó nyelvet választasz és azt JÓL használod! Meg, ha a többszálú dolgokat kellő biztonsággal és szakértelemmel írod meg. Pl generálás, betöltés stb. Sokat tudsz rövidíteni dolgokon. A másik a memóriánál szintén mit tartasz bent. Pl 2 pálya közötti váltásnál az első pályát nem hagyod bent, vagy épp kis pályák esetén, akár a 10 pályát mindet memóriában bent hagyva (mondjuk 10-100MB memóriát foglalva).
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!