我已经编译了一个matlab独立的exe,我可以在任何安装了MATLAB Compiler Runtime的计算机上运行.
但是启动exe需要20-30秒!
如何准确地测量时间和最重要的时间 - 如何将其减少到1-2秒.
这是从Yair Altman的博客中删除的:
splash包装器应用程序可以缓解部署(编译)的Matlab应用程序缓慢启动的痛苦.可在此处找到Splash窗口解决方案.虽然这样的初始包装确实很有用,但也可以使用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
Run Code Online (Sandbox Code Playgroud)
在Windows上:
REM set MCR_CACHE_ROOT=%TEMP%
set MCR_CACHE_ROOT="C:\Documents and Settings\Yair\Matlab Cache\"
myExecutable.exe
Run Code Online (Sandbox Code Playgroud)
如果需要,还有一些方法可以在Windows上永久设置此env变量...
从网络(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
Run Code Online (Sandbox Code Playgroud)
设置MCR_CACHE_ROOT也可用于解决部署的应用程序等的性能瓶颈,如在解释MathWorks公司的技术解决方案和相关的文章在这里.
在相关的事情中,当Matlab由于缺少权限权限而无法在MCR缓存目录中写入时,编译的Matlab可执行文件可能会失败并且无法访问MCR组件缓存错误.这可以通过将MCR_CACHE_ROOT设置为不存在的目录,或者设置为具有全局访问权限的文件夹(/ tmp或%TEMP%通常是这样的可写文件夹)来避免- 请参阅此处和此处的相关帖子.