Script Performance
To maximize performance, avoid using SetFormat (except the fast mode) and include the following lines near the top of each script:
#NoEnv
SetBatchLines -1
ListLines Off
In addition, the following commands may also affect performance depending on the nature of the script: SendMode, SetKeyDelay, SetMouseDelay, SetWinDelay, SetControlDelay, and SetDefaultMouseSpeed.
Each script is semi-compiled while it is being loaded and syntax-checked. In addition to reducing the memory consumed by the script, this also greatly improves runtime performance.
Here are the technical details of the optimization process (semi-compiling):
- Input and output variables (when their names don't contain references to other variables) and group names are resolved to memory addresses.
- Loops, blocks, IFs (expression), IFs (legacy), and ELSEs are given the memory addresses of their related jump-points in the script.
- The destination of each Hotkey, Gosub, and Goto is resolved to a memory address unless it is a variable.
- Each command name is replaced by an address in a jump table.
- Each line is pre-parsed into a list of parameters, and each parameter is pre-parsed into a list of variables (if any).
- Each expression is tokenized and converted from infix to postfix.
- Each reference to a variable or function is resolved to a memory address.
- Literal integers in expressions and math/comparison commands are replaced with binary integers.
In addition, during script execution, binary numbers are cached in variables to avoid conversions to/from strings. See SetFormat for details.