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?
Antwort
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.
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. –
Ich dachte, dass die Verzögerung beim Starten des Matlab Runtime Compiler irgendwo im Aufruf von mclInitializeApplication oder
Wenn ich mehrere MATLAB-Funktionen in mehreren DLLs habe, bedeutet dies, dass eine solche Verzögerung beim ersten Aufruf jeder Funktion auftritt? – user1913557
Wie machen Sie die Aufrufe in Ihrem C++ Code? –
Eine vollkommen gute Frage. Wahrscheinlich haben Nicht-Matlab-Benutzer es aufgrund von Missverständnissen geschlossen. –
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) –