2012-12-18 47 views
5

我從我的C++代碼調用了一個用MATLAB編寫的DLL。 我觀察到一個奇怪的效果:第一次通話需要更多的時間,接下來的通話。 它需要3-4倍多。 這是正常的嗎? 有沒有可能用它做點什麼?爲什麼第一次調用Matlab DLL花費的時間比後續調用要長得多?

+0

你是如何在你的C++代碼中調用的? –

+3

一個完美的問題。可能非Matlab用戶由於誤解而關閉了它。 –

+0

我的理解是避免這種情況的唯一方法是使用[Matlab編碼器](http://www.mathworks.com.au/products/matlab-coder/index.html)將Matlab代碼轉換爲C或C++代碼以及然後從那裏編譯它。正如@NominSim指出,「編譯」的Matlab代碼實際上並沒有編譯 - 有一個很好的回答這個問題[這裏](http://stackoverflow.com/questions/8636267/matlab-code-after-compilation) –

回答

3

是的,這是正常的,延遲來自啓動MATLAB Runtime Compiler。這是通過MATLAB創建的dll中運行的MATLAB代碼。 AFAIK無法避免初始啓動,但也可以在應用程序啓動時向DLL添加一個虛擬調用,以便稍後避免「成本」。

+1

由於問題被鎖定,我將添加此作爲評論。這是兩種類型的延遲 - 第一次在此計算機上第一次運行應用程序時,ZIP文件將被提取,MCR將啓動。第二種類型是當你已經運行這個應用程序一次。然後,只有MCR被加載。 –

+0

我認爲從啓動Matlab運行時編譯器的延遲是調用mclInitializeApplication或 Initialize()的某個地方。 – user1913557

+0

如果我在幾個DLL中有幾個MATLAB函數,這是否意味着這種延遲將在第一次調用每個函數時發生? – user1913557

相關問題