2012-12-18 4 views
5

私はC++コードから、MATLABで書かれたDLLを呼び出します。 私は奇妙な影響を観察します:最初の呼び出しは、次の呼び出しにはるかに多くの時間がかかります。 3〜4回以上かかる。 それは正常ですか? これで何かできますか?Matlab DLLへの最初の呼び出しで後続の呼び出しよりも時間がかかるのはなぜですか?

+0

どのようにしてC++コードで呼び出しを行っていますか? –

+3

完璧に良い質問です。おそらくMatlab以外のユーザーは誤解のためそれを閉じたでしょう。 –

+0

これを避ける唯一の方法は、Matlabコードを[Matlab Coder](http://www.mathworks.com.au/products/matlab-coder/index.html)を使用してCまたはC++コードに変換することですそこからコンパイルしてください。 @NominSimが指摘しているように、 "コンパイルされた" Matlabコードは実際にはコンパイルされません - このトピックに関する良いSOの答えがあります[ここ](http://stackoverflow.com/questions/8636267/matlab-code-after-compilation) –

答えて

3

はい、これは正常です。遅れはMATLAB Runtime Compilerの起動から発生します。これは、MATLABで作成したdllからMATLABコードを実行するものです。最初の起動はAFAIKを避けることはできませんが、後で "コスト"を避けるために、アプリケーションの起動時にダミーコールをDLLに追加することができます。

+1

質問がロックされているので、これをコメントとして追加します。 2種類の遅延があります。最初にこのコンピュータで初めて*アプリケーションを実行すると、ZIPファイルが抽出され、MCRが起動されます。もう1つは、すでにこのアプリケーションを1回実行したときです。次に、MCRのみがロードされます。 –

+0

私はMatlab Runtime Compilerの起動からの遅延がmclInitializeApplicationまたは Initialize()の呼び出しのどこかにあると考えました。 – user1913557

+0

いくつかのDLLにいくつかのMATLAB関数がある場合、そのような遅延は各関数の最初の呼び出しになりますか? – user1913557

関連する問題