23

我使用 MATLAB 将我的 MATLAB 程序转换为基于控制台的应用程序deploytool。执行 MATLAB.m文件大约需要 2 秒,但是在我将其转换为可执行文件并调用 后.exe,执行需要 45 秒,这太长了。

我想将 MATLAB 程序与 PHP 集成。有没有另一种有效和快速的方法来做到这一点?在我的项目中,时间确实是一个很大的因素(不是开发时间,而是应用程序的执行时间)。那么有没有一种时间更短的方法呢?

我在网上看到我们可以写PHP扩展来调用MATLAB。这个方法快还是和调用.exe文件一样?MATLAB 编码器对这个过程有帮助吗?如果有其他选择,请提及。

4

4 回答 4

16

MATLAB 编译的 .exe 在您第一次运行时会遇到开销,因为它正在启动 MCR:为什么我使用 MATLAB Compiler 4.1 编译的应用程序需要很长时间才能启动?

除非您注销或重新启动操作系统,否则 MCR 将保持预加载状态。另一个有用的读物​​:加速编译的应用程序启动

为什么我使用MATLAB编译器创建的单机第一次启动需要更长的时间? ”还报告说连续运行应该更快,但如果你稍后重新运行,你将不得不重新加载内存中的进程。

您可以将您的代码包含在 内tic toc,部署它并检查执行所花费的时间,以防止启动开销。

加快速度的替代方法.exe是使用 PHP 调用 MATLAB。如果您保持 MATLAB 会话打开,您会遇到一次开销。您可以在启动时启动 MATLAB,从而避免在使用 PHP 调用期间特别遭受开销。

有关更多信息,请阅读Calling MATLAB from PHPexit ,并请记住,除非特别需要,否则您不想使用。

于 2013-04-12T09:21:38.777 回答
7

调用使用 MATLAB Compiler 创建的可执行文件相对于在实时 MATLAB 中调用程序会产生开销,因为它需要启动 MCR。第一次启动它会更长,但即使在第一次之后仍然会有开销。

如果您不仅可以访问 MATLAB Compiler,还可以访问其中一个 Builder 产品(Builder for .NET 或 - 这可能更好,因为您使用的是 PHP - Builder for Java),那么有一种解决方法。

使用 Builder 产品,您可以创建独立的组件(.NET 程序集或 Java .jar)。然后,您可以创建一个运行的 .NET 或 Java 应用程序,实例化您的 MATLAB 构建的组件(它会启动 MCR),然后坐在那里等待来自您的 PHP 的调用。然后,每个调用根本不会受到 MCR 启动开销的影响,并且从 PHP 到 .NET/Java 的调用的开销应该小得多。

于 2013-04-17T12:07:09.817 回答
2

正如其他人所说,当您调用可执行文件时,加载可执行文件时会产生(对于matlab来说真的很大)开销。解决方案?只加载一次。怎么做?它很复杂并且取决于平台。

我认为最便携的方法是在 matlab 中创建一个服务器(我知道这是可能的,但我从未尝试过)。因此,当您需要使用它时,您只需连接到它并发送参数即可。

看看这个:matlab 中的 HTTP 服务器和这个:http: //blogs.mathworks.com/loren/2011/05/27/transferring-data-between-two-computers-using-matlab/

于 2013-04-23T01:40:25.473 回答
1

就像上面所说的一样,我可以建议设置一个 RAM 驱动器,并将MCR_CACHE_ROOT系统变量设置为 RAM 驱动器上的一个目录。

这将显着改善进一步的启动时间。

如果有人在桌面上使用此方案,请确保您的 RAM 驱动器在重新启动期间保持不变。

于 2020-04-02T10:59:27.050 回答