2012-10-19 5 views
6

Ich habe eine Matlab Standalone-Exe kompiliert, die ich auf jedem Computer ausführen kann, auf dem die MATLAB Compiler Runtime installiert ist.Startup-Zeiten von Matlab ausführbar

Das Starten der EXE dauert jedoch 20-30 Sekunden!

Wie kann ich die Zeit genau und am wichtigsten messen - wie kann ich es auf 1-2 Sekunden verringern.

+0

Ich glaube nicht, dass Sie können. Aber ich würde gerne eine andere Antwort sehen. – angainor

+0

Die Startzeit ist (meiner Erfahrung nach) mit der Aktivierung der MCR verbunden. Ich habe mir dieses Problem schon einmal angeschaut und kam nie auf die Idee, es zu beschleunigen (wirklich ärgerlich, stimme ich zu). Beachten Sie jedoch einen Punkt: Wenn Sie mehrere Standalone-Execs nacheinander aufrufen, muss die Hochlaufzeit (wieder nach meiner Erfahrung) ab dem zweiten Aufruf geringer sein. Wahrscheinlich etwas damit zu tun, dass der Computer schlau genug ist, um einen initialisierten MCR im RAM zu halten. –

+0

Meinst du es ist langsam das erste Mal nach der Bereitstellung/Neustart oder jedes Mal? –

Antwort

5

Dies wird aus Yair Altman's blog genommen:

Ein Spritzen Wrapper-Anwendung viel von dem Schmerz des langsamen Starts der eingesetzten (kompilierten) Matlab-Anwendungen erleichtert werden. A Splash window solution can be found here. Während solch ein Splash-Wrapper tatsächlich nützlich ist, kann es auch möglich sein, eine tatsächliche Beschleunigung des Starts der kompilierten Anwendung unter Verwendung der Umgebungsvariablen MCR_CACHE_ROOT zu erreichen.

Normalerweise werden die MCR und die eigenständige ausführbare Datei bei jedem Start im temporären Verzeichnis des Benutzers entpackt und gelöscht, wenn der Benutzer sich abmeldet. Wenn die Umgebungsvariable MCR_CACHE_ROOT festgelegt wird, werden diese Dateien anscheinend nur einmal entpackt und für die spätere Wiederverwendung aufbewahrt. Wenn dieser Bericht tatsächlich wahr ist, könnte dies die Startzeit einer kompilierten Anwendung in nachfolgenden Aufrufen erheblich beschleunigen.

Unter Linux:

export MCR_CACHE_ROOT=/tmp/mcr_cache_root_$USER # local to host 
mkdir -p @MCR_CACHE_ROOT 
./myExecutable 

Unter Windows:

REM set MCR_CACHE_ROOT=%TEMP% 
set MCR_CACHE_ROOT="C:\Documents and Settings\Yair\Matlab Cache\" 
myExecutable.exe 

Es gibt auch Möglichkeiten, diese env Variable permanent auf Windows zu setzen, wenn nötig ...

MCR_CACHE_ROOT Einstellung ist besonders wichtig, Wenn Sie die ausführbare Datei von einem Netzwerk- (NFS-) Speicherort aus ausführen, kann das Entpacken auf einen Netzwerkspeicherort ziemlich langsam sein. Wenn die ausführbare Datei parallel auf verschiedenen Computern ausgeführt wird (z. B. einem Computercluster, auf dem ein paralleles Programm ausgeführt wird), könnte dies sogar cause lock-outs sein, wenn verschiedene Cluster versuchen, auf denselben Netzwerkspeicherort zuzugreifen. In beiden Fällen besteht die Lösung darin, MCR_CACHE_ROOT auf einen lokalen Ordner zu setzen (z. B./tmp oder% TEMP%). Wenn Sie die extrahierten Dateien erneut verwenden möchten, sollten Sie die extrahierten Dateien möglicherweise nicht löschen, sondern wiederverwenden. Andernfalls löschen Sie einfach den temporären Ordner, nachdem die ausführbare Datei beendet wurde. Im folgenden Beispiel ist $ RANDOM ein Bash-Funktion, die eine Zufallszahl zurückgibt:

export MCR_CACHE_ROOT=/tmp/mcr$RANDOM 
./matlab_executable 
rm -rf $MCR_CACHE_ROOT 

Einstellung MCR_CACHE_ROOT können auch andere Performance-Engpässe eingesetzt werden in bereitgestellten Anwendungen zu lösen, wie in einem MathWorks technical solution und einem verwandten Artikel here erläutert.

In einer verwandten Angelegenheit, kompilierte Matlab ausführbare Datei kann fehlschlagen mit einem Konnte nicht auf die MCR-Komponente Cache-Fehler zugreifen, wenn Matlab kann nicht im MCR-Cache-Verzeichnis aufgrund fehlender Berechtigungen schreiben. Dies kann vermieden werden, indem MCR_CACHE_ROOT auf a non-existent directory oder auf einen Ordner mit globalen Zugriffsberechtigungen gesetzt wird (/ tmp oder% TEMP% sind normalerweise solche schreibbaren Ordner) - siehe zugehörige Posts here und here.

0

Wenn Sie den Code mithilfe von deploytool kompilieren, deaktivieren Sie unter Projekt - Einstellungen - Toolboxes auf Pfad alle Toolboxen, die von Ihrer ausführbaren Datei nicht benötigt werden. Ich hatte dieses Problem kürzlich und die oben genannten Schritte haben die Größe der ausführbaren Datei halbiert und die Startzeit der ausführbaren Datei erheblich reduziert.