Code Optimisation: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
No edit summary
No edit summary
Line 7: Line 7:
==Getting position==
==Getting position==
* [[getPosASL]]/[[getPosATL]] are 1.67x FASTER than regular [[getPos]]
* [[getPosASL]]/[[getPosATL]] are 1.67x FASTER than regular [[getPos]]
==10,000 Iterations Limit in Loops==
Doesn't exist in scheduled environments, only in non - scheduled (only where the 0.3ms delay does not exist).


==Loops==
==Loops==

Revision as of 13:57, 25 January 2010

Written it twice? Put it in a function

Pre-compilation by the game engine can save up 20x the amount of time processing, even if the initial time is slightly lengthened. If you've written it twice, or if there is a kind of loop consistently being compiled (perhaps a script run by execVM), make it into a function (FUNCVAR =compile preprocessfilelinenumbers "filename.sqf").

Adding elements to an array

Getting position

10,000 Iterations Limit in Loops

Doesn't exist in scheduled environments, only in non - scheduled (only where the 0.3ms delay does not exist).

Loops

These first two loop types are identical in speed (+/- 10%), and are more than 2x as fast the proceeding two loop types.

  • for "_y" from 0 to (count [0,0,0,0] - 1) step 1 do { ... };
  • { ... } foreach [0,0,0,0];

Where as these two loops are much slower, and for maximum performance, avoided.

  • _y=0; while {_y = _y + 1; _y < count [0,0,0,0]} do { ... };
  • for [{_y=0},{_y<(count [0,0,0,0])},{_y=_y+1}] do { ... }

Avoid O(n^2)!!

Commonly you may set up foreach foreach's. 'For' example:

  • { { ... } foreach [0,0,0]; } foreach [0,0,0];

This example is of the order (n^2) (3^2 = 9 iterations). For each element you add to this, it will increase the processing exponentially. Which can lead to poor performance in snap functions.

Avoiding the 0.3ms delay

Many times you may want to avoid the 0.3 ms delay (not 3ms!), and there a few tricks around how to do it...

  • Triggers are inside what we call the 'non-scheduled' environment.
  • All pre-init code executions are without scheduling.
  • FSM conditions are without scheduling

Measuring Velocity Scalar

Sure we can just use Pythagorean theorem to calculate the magnitude from a velocity vector, but a command native to the engine runs much faster (over 10x faster) than the math.

  • VECTOR distance [0,0,0]

Works for 2D vectors as well.