为什么Matlab Profiler说'for'循环的'end'语句存在瓶颈?

zer*_*ord 11 performance profiler matlab profiling for-loop

所以,我最近开始定期使用Matlab的内置分析器,我注意到虽然它通常很好地显示哪些线占用了最多的时间,但有时它会告诉我大量的时间正在循环end语句中使用for.

现在,看到这样一条线只是用来表示循环的结束,我无法想象它如何使用除了微不足道的处理之外的任何东西.

我已经在matlab中心看到了这个问题的特定版本,但似乎没有达成共识.

编辑:这是这个问题的最小例子:

for i =1:1000
    x = 1;
    x = [x 1];
    % clear x;
end
Run Code Online (Sandbox Code Playgroud)

即使您取消注释clear,该end行仍然需要大量计算(大约20%),并且clear实际上增加了结束行执行的绝对计算量.

Mar*_*arc 8

当我在我的代码中看到这个时,就是在循环中创建的大型临时代码的重新分配.在循环中创建的每个新变量都在该处释放end.

  • @Marcin所以结果是结束了释放内存然后重新启用它.显然有一个未记录的命令'profile -memory on'允许你在你的个人资料结果中看到这种事情 (6认同)
  • 那么你可以使用`clear var1`明确释放变量来缓解它吗? (2认同)
  • @zergylord谢谢,发现了一篇关于它的文章:[未记录的分析器选项](http://undocumentedmatlab.com/blog/undocumented-profiler-options/) (2认同)