2012-10-19 31 views
6

我編譯了一個matlab standalone exe文件,我可以在任何安裝了MATLAB Compiler Runtime的計算機上運行。改善matlab可執行文件的啓動時間

但是啓動exe需要20-30秒!

我怎樣才能準確地測量時間和最重要的 - 我怎樣才能減少到1-2秒。

+0

我不認爲你可以。但我肯定希望看到不同的答案.. – angainor

+0

啓動時間(根據我的經驗)與啓動MCR相關。我以前看過這個問題,從來沒有想出一種方法來加速它(真的很討厭我同意)。但是,有一點需要注意:如果您連續調用多個獨立的exe文件,啓動時間(從我的經驗來看)從第二個調用開始的時間必須減少。可能與計算機有足夠的聰明才能在RAM中保存初始化的MCR有關。 –

+0

你的意思是在部署/重啓後第一次或每次都很慢? –

回答

5

這取出Yair Altman's blog

一個形象包裝應用可以減輕多少部署(編譯)MATLAB應用程序的啓動速度慢的痛苦。 A Splash window solution can be found here。雖然這樣的splash包裝確實很有用,但也可以使用MCR_CACHE_ROOT環境變量實現已編譯應用程序啓動的實際加速。

通常情況下,MCR和獨立的可執行文件在用戶的臨時目錄每次啓動時打開包裝,並在用戶註銷時刪除。顯然,當設置了MCR_CACHE_ROOT環境變量時,這些文件只被解壓縮一次並保存以備後用。如果這個報告確實如此,那麼這可以在後續調用中顯着加快已編譯應用程序的啓動時間。

在Linux上:

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

在Windows上:

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

也有辦法,如果需要在Windows永久設置這個環境變量...

設置MCR_CACHE_ROOT尤爲重要當從網絡(NFS)位置運行可執行文件時,因爲解包到網絡位置可能會很慢。如果可執行文件在不同的計算機上並行運行(例如,運行並行程序的計算機羣集),那麼當不同的羣集嘗試訪問相同的網絡位置時,甚至可能是cause lock-outs。在這兩種情況下,解決方案都是將MCR_CACHE_ROOT設置爲本地文件夾(例如/ tmp或%TEMP%)。如果您打算重新使用提取的文件,那麼也許您不應該刪除提取的文件,而是重新使用它們。否則,只需在可執行文件結束後刪除臨時文件夾即可。在下面的例子中,$ RANDOM是一個bash函數返回一個隨機數:

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

設置MCR_CACHE_ROOT也可用於解決部署的應用程序等的性能瓶頸,如在MathWorks technical solution解釋和相關文章here

在相關問題上,編制Matlab的可執行文件可能會因無法訪問MCR組件高速緩存錯誤,Matlab的時候不能在MCR緩存目錄由於缺少許可權寫。這可以通過MCR_CACHE_ROOT設置爲a non-existent directory避免,或到一個文件夾,其中有全局訪問許可(/ tmp或%TEMP%通常是這樣寫的文件夾) - 見相關文章herehere

0

如果使用部署工具編譯代碼,工程項目 - 設置 - 工具箱上的路徑取消選中不需要的你的可執行文件的任何工具箱。我最近遇到了這個問題,上述步驟將可執行文件大小減半,並大大縮短了可執行文件的啓動時間。

相關問題