Я вызываю из своего кода C++ DLL, написанную в MATLAB. Наблюдаю странный эффект: первый звонок занимает гораздо больше времени, чем последующие звонки. Нужно в 3-4 раза больше. Это нормально? Можно ли что-то с этим сделать?
Почему первый вызов DLL Matlab занимает гораздо больше времени, чем последующие вызовы?
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
Поскольку вопрос закрыт, я добавлю это как комментарий. Существует два типа задержек: первая, когда вы впервые когда-либо запускаете свое приложение на этом компьютере, затем извлекается ZIP-файл и запускается MCR. Второй тип — это когда вы уже запускали это приложение один раз. Затем загружается только MCR.
- person Andrey Rubshtein; 19.12.2012
Я думал, что задержка запуска компилятора Matlab Runtime Compiler связана с вызовом mclInitializeApplication или ‹functionName›Initialize().
- person user1913557; 19.12.2012
Если у меня есть несколько функций MATLAB в нескольких DLL, означает ли это, что такая задержка будет при первом вызове каждой функции?
- person user1913557; 19.12.2012