Как инициализировать и загрузить MCR

Я включил общую библиотеку C ++, сгенерированную из MATLAB, в консольное приложение Win32. Программа MATLAB выполняется в течение 2-3 секунд в MATLAB, но консольное приложение занимает 11-12 секунд. Я прочитал это из-за времени запуска MCR, и я полагаю, что после инициализации MCR это должно занять то же время, что и в Matlab. Итак, как я могу загрузить или инициализировать MCR, чтобы он всегда находился в оперативной памяти или в кэше, чтобы консольное приложение работало в течение 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

Решение

Вы работаете в режиме отладки или выпуска? Если вы работаете в режиме отладки, попробуйте запустить в выпуске и посмотреть, решит ли это вашу проблему. Вы используете Visual Studio? Если это так, попробуйте открыть окно модулей, там вы увидите список загруженных библиотек. Проверьте и посмотрите, постоянно ли загружается и выгружается ваша библиотека, или она загружается один раз и остается загруженной.

0

Другие решения

Я не знаю, на какой машине работает vm matlab, но, например, на JVM есть Nailgun, Java-сервер, который работает в фоновом режиме и может вызываться всякий раз, когда нужно выполнить некоторые Java-приложения. Я знаю, что Matlab использует Java, но я не уверен, что ваша DLL все еще вызывает его. Так что если это произойдет, это может быть проблемой.

0

Попытайтесь поместить MCR и все зависимости разделяемой библиотеки в RAM-диск.

Существует множество способов создания ОЗУ. Я бы предложил использовать ImDisk

0
По вопросам рекламы [email protected]