我從我的C++代碼調用了一個用MATLAB編寫的DLL。 我觀察到一個奇怪的效果:第一次通話需要更多的時間,接下來的通話。 它需要3-4倍多。 這是正常的嗎? 有沒有可能用它做點什麼?爲什麼第一次調用Matlab DLL花費的時間比後續調用要長得多?
回答
是的,這是正常的,延遲來自啓動MATLAB Runtime Compiler。這是通過MATLAB創建的dll中運行的MATLAB代碼。 AFAIK無法避免初始啓動,但也可以在應用程序啓動時向DLL添加一個虛擬調用,以便稍後避免「成本」。
由於問題被鎖定,我將添加此作爲評論。這是兩種類型的延遲 - 第一次在此計算機上第一次運行應用程序時,ZIP文件將被提取,MCR將啓動。第二種類型是當你已經運行這個應用程序一次。然後,只有MCR被加載。 –
我認爲從啓動Matlab運行時編譯器的延遲是調用mclInitializeApplication或
如果我在幾個DLL中有幾個MATLAB函數,這是否意味着這種延遲將在第一次調用每個函數時發生? – user1913557
- 1. 爲什麼調用fork()比調用pthread_create()要花費更長的時間?
- 2. 爲什麼EF花費很長時間在第一個被調用的方法
- 3. 爲什麼popover第一次花費很多時間?
- 4. 第一次調用WCF服務需要花費非常多的時間嗎?
- 5. 調用SignedCMS.Decode花費的時間太長
- 6. 爲什麼grep -w花費的時間比grep長很多?
- 7. 什麼能導致ITransaction.CommitAsync調用花費很長時間(24h)?
- 8. 在Windows Azure雲應用程序中,第一次服務器調用比後續調用需要更多時間?
- 9. 爲什麼「partial_fit」方法比「fit」方法花費的時間要長很多
- 10. Oracle連接池需要花費大量的時間,第一次調用
- 11. 第一次調用SOAP Web服務(JAX-WS)時,爲什麼要花太長時間來響應Websphere?
- 12. office.js ExecuteFunction在第一次調用後需要很長時間才能調用
- 13. MongoDB--花費更多時間進行第一次讀取比SQL
- 14. 第一次ResultSet.next()調用花費了一分多鐘
- 15. 使用REST的服務 - 第一次花費更長的時間如下要求
- 16. 爲什麼加載一個pickle對象比加載文件花費的時間要長得多?
- 17. 爲什麼Boost unordered_map在第一次插入時花費太多時間?
- 18. 爲什麼連續多次調用NSMetadataQueryDidUpdateNotification?
- 19. 爲什麼第一個方法調用總是花時間最長?
- 20. 第一次運行時報告花費的時間過長
- 21. EntityContext.SaveChange()需要較長的時間,在第一次調用
- 22. 爲什麼調用函數比直接執行函數代碼要花費更多的時間
- 23. Java ProcessBuilder.start()花費的時間比在終端中執行的時間長得多
- 24. 爲什麼Handlebars.js第一次使用後需要很長時間才能綁定?
- 25. 首次調用擴展方法比後續調用要慢
- 26. 爲什麼分區+分段花費的時間比從普通表查詢花費的時間更長?
- 27. JQuery Ajax調用需要花費很多時間
- 28. jQuery/Ajax調用需要花費很多時間才能完成
- 29. zumero_sync爲什麼需要多次調用?
- 30. 爲什麼來自服務器的第一個Firebase調用需要比後續調用更長的時間才能返回?
你是如何在你的C++代碼中調用的? –
一個完美的問題。可能非Matlab用戶由於誤解而關閉了它。 –
我的理解是避免這種情況的唯一方法是使用[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) –