Почему первый вызов DLL Matlab занимает гораздо больше времени, чем последующие вызовы?

Я вызываю из своего кода C++ DLL, написанную в MATLAB. Наблюдаю странный эффект: первый звонок занимает гораздо больше времени, чем последующие звонки. Нужно в 3-4 раза больше. Это нормально? Можно ли что-то с этим сделать?


person user1913557    schedule 18.12.2012    source источник
comment
Как вы делаете вызовы в своем коде С++?   -  person Sam I am says Reinstate Monica    schedule 18.12.2012
comment
Совершенно прекрасный вопрос. Вероятно, пользователи, не работающие с Matlab, закрыли его по недоразумению.   -  person Andrey Rubshtein    schedule 19.12.2012
comment
Насколько я понимаю, единственный способ избежать этого — преобразовать код Matlab в код C или C++, используя Matlab Coder, а затем скомпилировать его оттуда. Как указывает @NominSim, скомпилированный код Matlab на самом деле не скомпилирован - на эту тему есть хороший ответ SO здесь   -  person Colin T Bowers    schedule 19.12.2012


Ответы (1)


Да, это нормально, задержка возникает из-за запуска компилятора MATLAB Runtime Compiler. . Это то, что запускает код MATLAB из dll, созданного вами с помощью MATLAB. Первоначальный запуск нельзя избежать AFAIK, но вы можете добавить фиктивный вызов в DLL, когда ваше приложение запускается, чтобы избежать «затрат» позже.

person NominSim    schedule 18.12.2012
comment
Поскольку вопрос закрыт, я добавлю это как комментарий. Существует два типа задержек: первая, когда вы впервые когда-либо запускаете свое приложение на этом компьютере, затем извлекается ZIP-файл и запускается MCR. Второй тип — это когда вы уже запускали это приложение один раз. Затем загружается только MCR. - person Andrey Rubshtein; 19.12.2012
comment
Я думал, что задержка запуска компилятора Matlab Runtime Compiler связана с вызовом mclInitializeApplication или ‹functionName›Initialize(). - person user1913557; 19.12.2012
comment
Если у меня есть несколько функций MATLAB в нескольких DLL, означает ли это, что такая задержка будет при первом вызове каждой функции? - person user1913557; 19.12.2012