Matlab Runtime9.10开发的App编译为9.7版本后运行变慢问题咨询
问题原因及修复方案
跨版本性能差异的官方原因
- MathWorks在R2020a(对应Runtime v9.10)的JIT即时编译器中,新增了循环内动态数组自动预分配优化特性:可自动识别
Temp = [Temp; x]这类循环内逐次追加的数组操作,暗中提前分配足够的内存空间,避免了每次拼接都全量拷贝数据的O(n²)开销,因此该段代码在v9.10环境下运行效率符合预期。 - Runtime v9.7对应Matlab R2019b版本,该版本的JIT编译器未支持上述优化逻辑,循环内每次数组拼接都会触发完整的内存重新分配+已有数据拷贝操作,当循环次数达到百万级时,时间开销会指数级上升,最终表现为性能显著下降。
修复方案
你当前贴出的代码逻辑完全可以规避循环操作,直接用Matlab内置的矩阵维度转换实现,所有Runtime版本都可以获得最优性能:
% 原逻辑等价实现,无循环、无动态扩容问题,执行效率提升千倍以上 Output = ones(length(A),length(B)); Temp = Output(:);
如果实际业务中有不可省略的循环逻辑,通用优化方式是提前给Temp预分配足够的内存空间,不要在循环内动态扩容:
Output = ones(length(A),length(B)); len_A = length(A); len_B = length(B); % 提前预分配Temp的内存 Temp = zeros(len_A * len_B, 1); idx = 1; for ii = 1:len_A for jj = 1:len_B Temp(idx) = Output(ii,jj); idx = idx + 1; end end
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

