MATLAB在函数的最后一行之后需要很长时间

我有一个需要很长时间才能运行的功能.当我对它进行分析时,我发现超过一半的时间(50秒中的26个)没有计入逐行时序故障,我可以证明在函数完成运行之后但在它返回控制之前花费的时间通过以下方法:

ts1 = tic;
disp ('calling function');
functionCall(args);
disp (['control returned to caller - ', num2str(toc(ts1))]);

我调用的函数的第一行是ts2 = tic,最后一行是

disp (['last line of function- ', num2str(toc(ts2))]);

结果是

calling function

last line of function – 24.0043

control returned to caller – 49.857

在互联网上闲聊,我认为这是MATLAB管理内存的方式的症状.它取消了函数返回,有时需要很长时间.该函数确实分配了一些大的(~1百万个元素)数组.它也适用于句柄,但不会显式创建任何新的句柄对象或存储句柄.我的问题是:

>这绝对是一个内存管理问题吗?
>是否有任何系统的方法来诊断导致此功能出现问题的原因,而不是快速返回的其他问题?
>是否有减少MATLAB在功能退出时清理的时间的一般提示?

你是对的,似乎是花在 garbage collection上的时间.我担心它是一个基本的MATLAB缺陷,它已经知道多年,但MathWorks甚至在最新的MATLAB版本2010b中也没有解决它.

你可以尝试在离开函数之前手动将变量设置为[] – 即手动进行垃圾收集.此技术还有助于以前的MATLAB版本中的against memory泄漏.现在,MATLAB将花费时间不在最后,而是在myVar = [];

您可以在没有任何类型的引用的情况下缓解问题 – 匿名函数,嵌套函数,句柄类,不使用cellfun和arrayfun.

如果你已经到达了MATLAB的“性能障碍”,那么也许你应该只是改变环境.无论如何,从今天开始在MATLAB中开始一个新项目我没有任何意义,除非你使用的是SIMULINK. Python可以用于技术计算和使用C#,你也可以做许多MATLAB使用free libraries做的事情.它们都是真正的编程语言,并且是免费的,与MATLAB不同.

相关文章
相关标签/搜索