[Gelöst] Ist FindObjects reihenfolgen-sensitive?

D. h. kann ich Performance sparen, indem ich das spezifischste Kriterium zuerst angebe, sodass für den Rest der Kriterien nur durch eine kleinere Liste iteriert werden muss?

Ziemlich sicher ja.

Ui, praktisch!

Nicht unbedingt. Find_Func-Kriterien sollten immer ganz hinten stehen, weil Skriptaufrufe im Vergleich zu den engineintern implementierten Suchparametern immer teurer sind.

Generell sind das aber auch nur gute Ratschläge. Die einzige verlässliche Information kann nur von Messungen mit deiner konkreten Objektmenge und deinen Suchparametern kommen.

Vielleicht noch als zusätzliche Notiz: Kriterien, die den Suchort auf die jeweiligen Sektoren einschränken (-> Find_InRect etc.) werden unabhängig von der Reihenfolge schon am Anfang bearbeitet, außer innerhalb von Find_Or. (-> Sourcecode)

wie kann ich denn eine richtige Clonkrunde aufzeichnen und dann im Nachhinein den Skript Profiler einschalten? Also wie zeichne ich auf und wie spiele ich das im Editor ab? Oder wie kommt der Profiler dazu?

Am einfachsten ist es, wenn du den Profiler schon direkt während der Runde anmachst. Eine Aufnahme kann man leider standardmäßig nicht bearbeiten, da würdest du eine modifizierte Engine benötigen.

wie mach ich den Profiler denn während einer normalen Runde an? Und wie genau funktioniert dieser?  Ich hab ihn bisher nur über kurze Zeitphasen im Editor verwendet. Dort kam es mir so vor, als würde dieser die Werte nicht mehrmals speichern. Dh. ich mache den Profiler an. Dann mache ich irgendwas, was starke lags verursacht. Mache ich ihn währenddessen aus, sehe ich die verursachende  Funktion.  Mache ich ihn aber erst einige Zeit nach dem Lag aus, sehe ich die verursachende Funktion nicht mehr (weil sie mittlerweile aus x Gründen zurzeit nicht mehr laggt).  Ist das so, oder trügt mich mein Gefühl/Erinnerung?

Jedenfalls würde ich gerne so ziemlich alles von meinem Projekt testen. Im Editor wird aber scheinbar nicht alles durchgeführt, was im echten spiel gemacht wird (z.b Lichtanpassungen). Möglicherweise werden also auch andere Lag verursachende Dinge im Editor verfälscht. Deswegen würde ich den Profiler halt gerne während einer normalen Clonkrunde starten und hinterher, so nach 30-60 Minuten oder vllt auch länger, dann auswerten können, so dass wirklich jede langsame Funktion dokumentiert ist… und zwar so, dass sie auch mehrmals erscheint, wenn sie mal gelaggt hat und dann wieder nicht, optimalerweise mit Zeitangabe…
Geht das irgendwie, oder so ähnlich?

Der Profiler misst die Zeit, die pro Funktion gebraucht wird. Wenn du den Profiler während einer Runde laufen lässt, manche Funktionen aber nur kurzzeitig lange brauchen, dann ist die Funktion halt nicht mehr ganz oben. Normalerweise ist aber hauptsächlich das interessant zu optimieren, was im Verlauf einer längeren Runde konsistent lange braucht. Gerade bei Netzwerkspielen kann man ja Lag nicht zwischen Netzwerk- und Skriptproblemen unterscheiden.

okay… und wie kann ich den Profiler im Spiel aktivieren? Bisher kenne ich das nur im Editormodus. Oder gibt es abgesehen von den Lichtverhältnissen keine Unterschiede zwischen Editor und Spiel?

Ich habe nämlich seit kurzem das merkwürdige Phänomen, dass die FPS Rate von Spielbeginn an, nur bei 30 liegt und da auch bleibt. Das heißt ich hab dann ein komplettes Spiel mit 30FPS als maximalwert. Starte ich das Spiel nochmal neu, sinds 35 FPS als maximalwert. Starte ich nochmal neu sind es 39 FPS.   Also nicht zwingend in der Reihenfolge, es scheint völlig zufällig zu sein, was da als FPS als dauerhaften Maximalwerrt rauskommt.
Im editor habe ich das Phänomen nicht (glaube ich zumindest, die FPS Rate sehe ich da ja nicht… oder kann ich das da auch iwie einschalten? )… es ist außer einem Basisgebäude am anfang nichts gebaut, von daher habe ich keine ahnung woran das liegen kann. (es gibt einige Funktionen wie Umweltschutz und Kriegsnebel usw., aber abgesehen davon, dass die sonst nie laggen, wüsste ich auch nicht, warum es mal so und mal so sein sollte unter gleichen Bedingungen)

Debug-Modus während der Runde mit strg+F5 aktivieren, dann kannst du im Chat (Enter-Taste bei mir) mit /script Funktionen aufrufen. Also z.B. /script Log("bla")

Der Debug-Modus funktioniert aber nur in Netzwerkspielen bzw. wenn man der Autor des gespielten Szenarios ist.