MATLAB可执行文件太慢

问题描述 投票:23回答:3

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

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

我在Internet上看到我们可以编写PHP扩展来调用MATLAB。此方法快速还是与调用.exe文件相同? MATLAB编码器对此过程有帮助吗?如果有其他选择,请提及。

php c matlab exe matlab-deployment
3个回答
16
投票

MATLAB编译的.exe在第一次运行时会因为开销而开始,因为它正在启动MCR:Why does my application compiled with the MATLAB Compiler 4.1 take a long time to start up?

除非您注销或重新启动操作系统,否则MCR将保持预加载状态。另一个有用的读物​​:Speeding up compiled apps startup

Why does my stand-alone created using the MATLAB Compiler take longer to start the first time?”还报告连续运行应该更快,但是如果稍后重新运行,则必须将进程重新加载到内存中。

您可以将代码封装在tic toc中,进行部署,并检查执行花费了多少时间,而又没有启动开销。

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

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


7
投票

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

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

使用Builder产品,您可以创建一个独立的组件(.NET程序集或Java .jar)。然后,您可以创建一个将运行的.NET或Java应用程序,实例化您的MATLAB内置组件(启动MCR),然后坐在那里等待来自PHP的调用。这样,每个调用将完全不会承受MCR启动的开销,并且从PHP到.NET / Java的调用应仅具有较小的开销。


1
投票

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

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

看看这个:HTTP server in matlab和这个:http://blogs.mathworks.com/loren/2011/05/27/transferring-data-between-two-computers-using-matlab/

© www.soinside.com 2019 - 2024. All rights reserved.