2012-12-18 9 views
5

Ich rufe von meinem C++ Code eine DLL, die in MATLAB geschrieben wurde. Ich beobachte einen seltsamen Effekt: der erste Anruf benötigt viel mehr Zeit als der nächste Anruf. Es dauert 3-4 mal mehr. Ist das normal? Ist es möglich, etwas damit zu tun?Warum dauert der erste Aufruf einer Matlab-DLL viel länger als nachfolgende Aufrufe?

+0

Wie machen Sie die Aufrufe in Ihrem C++ Code? –

+3

Eine vollkommen gute Frage. Wahrscheinlich haben Nicht-Matlab-Benutzer es aufgrund von Missverständnissen geschlossen. –

+0

Mein Verständnis ist der einzige Weg, dies zu vermeiden, ist die Konvertierung des Matlab-Code in C oder C++ - Code mit [Matlab Coder] (http://www.mathworks.com.au/products/matlab-coder/index.html) und dann kompilieren Sie es von dort. Wie @NominSim herausfindet, wird "kompilierter" Matlab-Code nicht wirklich kompiliert - es gibt eine gute SO-Antwort zu diesem Thema [hier] (http://stackoverflow.com/questions/8636267/matlab-code-after-compilation) –

Antwort

3

Ja das ist normal, die Verzögerung kommt vom Starten der MATLAB Runtime Compiler. Dadurch wird der MATLAB-Code von der DLL ausgeführt, die Sie über MATLAB erstellt haben. Der erste Start kann nicht AFAIK vermieden werden, aber Sie können vielleicht einen Dummy-Aufruf an die DLL hinzufügen, wenn Ihre Anwendung beginnt, um die "Kosten" später zu vermeiden.

+1

Da die Frage gesperrt ist, werde ich dies als Kommentar hinzufügen. Es gibt zwei Arten von Verzögerungen - die erste, wenn Sie Ihre Anwendung zum ersten Mal * überhaupt * auf diesem Computer ausführen, dann wird die ZIP-Datei extrahiert und der MCR wird gestartet. Der zweite Typ ist, wenn Sie diese Anwendung bereits einmal ausgeführt haben. Dann wird nur der MCR geladen. –

+0

Ich dachte, dass die Verzögerung beim Starten des Matlab Runtime Compiler irgendwo im Aufruf von mclInitializeApplication oder Initialize() liegt. – user1913557

+0

Wenn ich mehrere MATLAB-Funktionen in mehreren DLLs habe, bedeutet dies, dass eine solche Verzögerung beim ersten Aufruf jeder Funktion auftritt? – user1913557