如何初始化和加载MCR

时间:2013-05-08 04:25:03

标签: c++ console-application matlab-deployment matlab-compiler

我将在MATLAB中生成的C ++共享库合并到Win32控制台应用程序中。 MATLAB程序需要2-3秒才能在MATLAB中执行,但控制台应用程序需要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;
}

我已经评论过以上几行认为它会让它更快但没有运气。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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