我在Win32控制台应用程序中引入了MATLAB生成的C++共享库。 MATLAB程序需要2-3秒才能在MATLAB中执行,但控制台应用程序需要11-12秒才能执行。我读到这是因为MCR的启动时间,我相信在MCR初始化后,它必须花费与matlab相同的时间。那么,如何加载或初始化MCR,使其始终位于RAM或缓存中,以便控制台应用程序运行需要2-3秒?我应该不得不做一个无限循环,以便连续加载MCR?我正在使用Windows操作系统,我正在从PHP调用控制台应用程序。任何教程或链接?如何初始化并加载MCR
我已经添加了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在内存中?你可以把它放到单独的进程中继续运行 - 或者简单地尝试减少加载时间。如果你有一个图形用户界面,一种可能性是已经显示图形用户界面并且在后面加载了MCR。另外..图书馆是否自动加载或可以延迟加载它以某种方式? – 2013-07-03 20:11:45