7

我已经编译了一个 matlab 独立 exe,我可以在任何安装了 MATLAB Compiler Runtime 的计算机上运行它。

但是启动 exe 需要 20-30 秒!

我怎样才能准确地测量时间,最重要的是 - 我怎样才能将它减少到 1-2 秒。

4

2 回答 2

6

这是从Yair Altman 的博客中取出的:

飞溅包装应用程序可以减轻已部署(编译)Matlab 应用程序启动缓慢的大部分痛苦。可以在此处找到启动窗口解决方案。虽然这样的启动包装器确实很有用,但也可以使用 MCR_CACHE_ROOT 环境变量来实现已编译应用程序启动的实际加速。

通常,MCR 和独立可执行文件会在每次启动时在用户的临时目录中解压缩,并在用户注销时删除。显然,当设置了 MCR_CACHE_ROOT 环境变量时,这些文件只会被解压一次并保留以供以后重用。如果此报告确实属实,这可以显着加快已编译应用程序在后续调用中的启动时间。

在 Linux 上:

export MCR_CACHE_ROOT=/tmp/mcr_cache_root_$USER   # local to host
mkdir -p @MCR_CACHE_ROOT
./myExecutable

在 Windows 上:

REM set MCR_CACHE_ROOT=%TEMP%
set MCR_CACHE_ROOT="C:\Documents and Settings\Yair\Matlab Cache\"
myExecutable.exe

如果需要,还有一些方法可以在 Windows 上永久设置这个环境变量......

从网络 (NFS) 位置运行可执行文件时,设置 MCR_CACHE_ROOT 尤其重要,因为解压到网络位置可能会很慢。如果可执行文件在不同的机器上并行运行(例如,运行并行程序的计算机集群),那么当不同的集群尝试访问相同的网络位置时,这甚至可能导致锁定。在这两种情况下,解决方案是将 MCR_CACHE_ROOT 设置为本地文件夹(例如,/tmp 或 %TEMP%)。如果您打算再次重用提取的文件,那么也许您不应该删除提取的文件而是重用它们。否则,只需在可执行文件结束后删除临时文件夹即可。在以下示例中,$RANDOM 是一个返回随机数的 bash 函数:

export MCR_CACHE_ROOT=/tmp/mcr$RANDOM
./matlab_executable
rm -rf $MCR_CACHE_ROOT

设置 MCR_CACHE_ROOT 还可用于解决已部署应用程序中的其他性能瓶颈,如MathWorks 技术解决方案和此处的相关文章中所述。

在相关问题中,当 Matlab 由于缺少权限而无法写入 MCR 缓存目录时,编译的 Matlab 可执行文件可能会失败,并出现无法访问 MCR 组件缓存错误。这可以通过将 MCR_CACHE_ROOT 设置为不存在的目录或设置为具有全局访问权限的文件夹(/tmp 或 %TEMP% 通常是此类可写文件夹)来避免 - 请参阅此处此处的相关帖子。

于 2012-10-19T20:33:29.813 回答
0

如果您使用 deploytool 编译代码,请在路径上的 Project - Settings-Toolboxes 下取消选中您的可执行文件不需要的任何工具箱。我最近遇到了这个问题,上述步骤将可执行文件大小减少了一半,并显着减少了可执行文件的启动时间。

于 2014-08-13T12:58:56.223 回答