# 脚本性能

要让性能最佳化, 请避免使用 SetFormat(不包括快速模式) 并且在每个脚本的顶部附近加上下面的这些行:

    #NoEnv
    SetBatchLines -1
    ListLines Off

此外, 根据脚本的内容下面的命令可能同样会影响性能: SendMode, SetKeyDelay, SetMouseDelay, SetWinDelay, SetControlDelay 和 SetDefaultMouseSpeed.

## 内置性能特性

在加载和语法检查每个脚本时, 会对它们进行半编译. 这样除了可以减少内存消耗外, 还可以极大地提高运行时的性能.

下面是优化过程(半编译) 的技术细节:

- 把输入和输出变量(当它们的名称不包含到其他变量的引用时) 和组名解析为内存地址.
- 为 Loop, 区块, IFs (表达式), IFs (传统) 和 ELSE 提供它们在脚本中相关跳转点的内存地址.
- 把每个热键, Gosub 和 Goto 的目标解析为内存地址, 除非它是变量.
- 使用跳转表把每个命令名替换为地址.
- 把每行预解析成参数列表, 且把每个参数预解析成变量列表(如果有).
- 标记化每个表达式且把它们从中缀转到后缀.
- 把每个到变量或函数的引用解析为内存地址.
- 把表达式和数学/比较命令中的原义整数替换成二进制整数.

此外, 在脚本执行期间, 对二进制数进行缓存以避免和字符串之间的相互转换. 请参阅 SetFormat 了解详情.

dftg