如何初始化和加载 MCR

Posted

技术标签:

【中文标题】如何初始化和加载 MCR【英文标题】:How to initialize and load MCR 【发布时间】:2013-05-08 04:25:02 【问题描述】:

我将 MATLAB 生成的 C++ 共享库合并到 Win32 控制台应用程序中。 MATLAB 程序在 MATLAB 中执行需要 2-3 秒,但控制台应用程序需要 11-12 秒才能执行。我读到这是因为 MCR 的启动时间,我相信在初始化 MCR 后,它必须花费与 matlab 相同的时间。那么如何加载或初始化 MCR 以使其始终位于 RAM 或缓存​​中,以便控制台应用程序运行需要 2-3 秒?我是否必须制作一个无限循环以便连续加载 MCR?我正在使用 Windows 操作系统,我正在从 php 调用控制台应用程序。有任何教程或链接吗?

我已将 MCR_CACHE_ROOT 添加为指向文件夹(不是临时文件夹)的环境变量。我的控制台应用程序代码如下:

// shoes_shared.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "shoes_sharedlibrary.h"
#include <iostream>
#include <string.h>
#include "mex.h"



using namespace std;

int _tmain(int argc, _TCHAR* argv[])

    /* Call the MCR and library initialization functions */
 //const char *pStrings[]="-nojvm","-nojit";
 //   if (!mclInitializeApplication(pStrings,2))
 //   
 //       fprintf(stderr, "Could not initialize MCR for the application.\n");
 //       return -1;
 //   

if (!shoes_sharedlibraryInitialize())


    exit(1);




     mwArray img(argv[1]); 

     double wt1 = _tstof(argv[2]);
     mwArray C(wt1);
    double wt2 = _tstof(argv[3]);
    mwArray F(wt2);
    double wt3 = _tstof(argv[4]);
    mwArray T(wt3);
    double wt4 = _tstof(argv[5]);
    mwArray S(wt4);



           test_shoes(img,C,F,T,S);
            //shoes_sharedlibraryTerminate();
            //mclTerminateApplication();
            return 0;

我已经评论了上面的行,认为它会使其更快但没有运气。有什么帮助吗?

【问题讨论】:

您希望如何在两次调用控制台应用程序之间将 MCR 保留在内存中?您可以将其放入继续运行的单独进程中 - 或者只是尝试减少加载时间。如果您有 GUI,还有一种可能性是已经显示 GUI 并在后面加载 MCR。另外.. 库会自动加载还是您可以以某种方式延迟加载它? 【参考方案1】:

您是在调试还是发布?如果您在调试中运行,请尝试在发布中运行,看看是否可以解决您的问题。你在使用 Visual Studio 吗?如果是这样,请尝试打开模块窗口,您将看到已加载的 dll 列表。检查并查看您的库是否不断加载和卸载,或者它是否加载一次并保持加载状态。

【讨论】:

【参考方案2】:

我不知道matlab在哪个vm上运行,但是比如JVM里面有Nailgun,一个Java服务器,在后台运行,需要执行一些java应用程序时可以调用。我知道 Matlab 使用 Java,但我不知道您的 DLL 是否仍然调用它。所以如果是这样,那可能就是问题所在。

【讨论】:

【参考方案3】:

尝试将 MCR 和所有共享库依赖项放入 RAM 驱动器。

有很多方法可以创建 RAM 驱动器。我建议使用ImDisk

【讨论】:

以上是关于如何初始化和加载 MCR的主要内容,如果未能解决你的问题,请参考以下文章

初始化后,SQL Server docker容器停止

如何动态加载Autofac配置进行初始化

如何使用新的 url 和一些参数重新加载数据表而不重新初始化它

dyld加载图像时如何分析调用初始化函数的时间?

类在什么时候加载和初始化

JVM-加载,链接,初始化