我将我的matlab程序转换为.net程序集,即dll文件。我已经制作了一个控制台C#应用程序添加dll文件并从php调用它。每次调用.exe时都会调用MCR。如何在服务器启动时初始化MCR,即使在一定时间后调用exe,也不会每次都关闭?如果还有其他方法可以快速完成这个过程,请建议。
答案 0 :(得分:6)
你可以直接在这里做很多事情。 MCR架构具有较高的启动成本;对于反复调用的短期运行程序来说,这并不好。
您可以通过以下方式加快速度:
但这些可能不会让你超级快;几乎肯定不够快,无法合理的页面加载时间。
要真正快速完成,您可能需要将程序体系结构更改为客户端/服务器,您可以在其中启动在其中运行MCR代码的持久性服务器进程,并向PHP客户端提供请求。您需要进行额外的编码,以确保在“干净”的环境中为请求提供服务。
您还可以将MCR dll加载到Web服务器中,使其在服务器生命周期内持续存在。这将是一个更简单的设置,但您可能受到单线程Matlab会话的限制,并且必须处理为每个请求获得一个干净的起点。
MathWorks解决方案是新的Matlab Production Server,它可以将已编译的MCR代码加载到工作池中,并从预热的预加载的Matlab工作器实例中提供服务客户端M代码请求。它解决了MCR应用程序的这个问题。这个或DIY客户端/服务器方法的关键是在客户端请求发生之前在Matlab会话中“旋转”你的MCR代码,这样你的客户就永远不会看到高MCR启动成本。
编辑:有关于将MCR组件部署到Web MATLAB Application Deployment Web Example Guide的整个MathWorks指南,它不仅仅使用Matlab生产服务器。看起来他们主要说客户端/服务器,但您也可以直接在Web服务器中加载MCR组件以实现低负载水平。答案 1 :(得分:0)
除了作为answer above中所有内容的补充外,我建议设置RAM驱动器,并将MCR_CACHE_ROOT
系统变量设置为RAM驱动器上的目录。
这将大大缩短启动时间。
如果有人在台式机上使用此方案,请确保RAM驱动器在重新引导期间是持久的。