最近我分析了一些 MATLAB 代码,我很震惊地在一个频繁使用的函数中看到以下内容:
5.76 198694 58 persistent CONSTANTS;
3.44 198694 59 if isempty(CONSTANTS) % initialize CONSTANTS
换句话说,MATLAB 花了大约 9 秒,超过 198694 次函数调用,声明持久化CONSTANTS
并检查它是否已初始化。这占该功能所花费总时间的13% 。
在 MATLAB 中,持久变量真的会带来这么多的性能损失吗?还是我们在这里做错了什么?
更新
@Andrew我尝试了你的示例脚本,我对输出非常非常困惑:
time calls line
6 function has_persistent
6.48 200000 7 persistent CONSTANTS
1.91 200000 8 if isempty(CONSTANTS)
9 CONSTANTS = 42;
10 end
我尝试了 bench() 命令,它显示我的机器处于示例机器的中间范围。在 Intel(R) Core(TM) i7 CPU、4GB RAM 上运行 Ubuntu 64 位。