我在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