5

我将我的 matlab 程序转换为 .net 程序集,即 dll 文件。我制作了一个控制台 C# 应用程序,添加了 dll 文件并从 php 调用它。每次调用 .exe 时都会调用 MCR。我怎样才能让 MCR 在服务器启动时初始化,而不是每次都关闭,即使 exe 在一定时间后被调用?如果有任何其他方法可以加快这个过程,请建议。

4

2 回答 2

7

你不能直接在这里做很多事情。MCR架构启动成本高;对于反复调用的短期运行程序来说,这不是很好。

您可以通过以下方式使其更快:

  • 确保 MCR 在每台运行它的机器上本地安装
  • 为已编译的 Matlab 程序预扩展 CTF 存档
  • 在每台运行它的机器上本地部署你的编译程序
  • 购买固态硬盘
  • 定期在后台虚拟运行您的程序,以确保其文件在磁盘缓存中保持“温暖”。

但这些可能不会让你超快;几乎可以肯定对于合理的页面加载时间不够快。

为了真正快速地获得它,您可能需要将您的程序架构更改为客户端/服务器架构,在其中启动一个持久服务器进程,其中运行您的 MCR 代码,并为您的 PHP 客户端提供请求。您需要进行额外的编码以确保在“干净”的上下文中为请求提供服务。

您还可以将 MCR dll 加载到您的 Web 服务器中,以便它在服务器生命周期内持续存在。这将是一个更简单的设置,但您可能会受到单线程 Matlab 会话的限制,并且必须处理为每个请求获取一个干净的起点。

MathWorks 的解决方案是新的Matlab 生产服务器,它可以将已编译的 MCR 代码加载到工作池中,并为来自预热的预加载 Matlab 工作实例的客户端 M 代码请求提供服务。它正好解决了 MCR 应用程序的这个问题。这种或 DIY 客户端/服务器方法的要点是在客户端请求发生之前在 Matlab 会话中“启动”您的 MCR 代码,因此您的客户永远不会看到高昂的 MCR 启动成本。

编辑:有一个关于将 MCR 组件部署到 Web 的完整 MathWorks 指南,即MATLAB 应用程序部署 Web 示例指南,它不仅仅使用 Matlab 生产服务器。看起来他们大多说去客户端/服务器,但您也可以直接在 Web 服务器中加载 MCR 组件以实现低负载水平。

于 2013-04-22T05:41:53.913 回答
0

作为上述答案中所有内容的补充,我可以建议设置 RAM 驱动器,并将MCR_CACHE_ROOT系统变量设置为 RAM 驱动器上的目录。

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

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

于 2020-04-02T10:57:24.797 回答