3

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

я прокомментировал строки выше, думая, что он будет делать это быстрее, но не повезло. Любая помощь?

+0

Как вы хотите сохранить MCR в памяти между двумя вызовами в консольном приложении? Вы можете поместить его в отдельный процесс, который продолжает работать, или просто попытаться уменьшить время загрузки. Одна из возможностей, если у вас есть GUI, - это уже отобразить GUI и загрузить MCR в спину. Также .. ли библиотека загружается автоматически или вы можете ее откладывать в некотором роде? –

ответ

0

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

0

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^