Tôi gọi từ mã C++ của tôi là một DLL được viết bằng MATLAB. Tôi quan sát một hiệu ứng lạ: cuộc gọi đầu tiên mất nhiều thời gian hơn để thực hiện các cuộc gọi tiếp theo. Mất gấp 3-4 lần. Có bình thường không? Có thể làm điều gì đó với nó không?Tại sao cuộc gọi đầu tiên đến một DLL Matlab mất nhiều thời gian hơn các cuộc gọi tiếp theo?
Trả lời
Có điều đó là bình thường, sự chậm trễ xuất phát từ việc bắt đầu MATLAB Runtime Compiler. Đây là những gì chạy mã MATLAB từ dll mà bạn đã tạo thông qua MATLAB. Khởi động ban đầu không thể tránh AFAIK, nhưng bạn có thể thêm một cuộc gọi giả vào DLL khi ứng dụng của bạn bắt đầu để tránh "chi phí" sau này.
Vì câu hỏi bị khóa, tôi sẽ thêm điều này làm nhận xét. Hai loại chậm trễ - lần đầu tiên khi bạn chạy ứng dụng của mình trong lần đầu tiên * bao giờ * trong máy tính này, sau đó tệp ZIP được trích xuất và MCR được khởi chạy. Loại thứ hai là khi bạn đã chạy ứng dụng này một lần. Sau đó, chỉ có MCR được nạp. –
Tôi nghĩ rằng sự chậm trễ bắt đầu từ Matlab Runtime Compiler là một nơi nào đó trong cuộc gọi đến mclInitializeApplication hoặc
Nếu tôi có một số chức năng MATLAB trong một số DLL của nó có nghĩa là, rằng sự chậm trễ như vậy sẽ được vào cuộc gọi đầu tiên cho mỗi chức năng? – user1913557
- 1. Hiệu suất WCF Chậm cho cuộc gọi đầu tiên
- 2. Một cuộc gọi lớn so với nhiều cuộc gọi TSQL nhỏ hơn
- 3. Tại sao cuộc gọi khách hàng WCF đầu tiên lại chậm?
- 4. Cuộc gọi liên tiếp để recvfrom() mất dữ liệu?
- 5. Nhiều cuộc gọi đến CountDownLatch.await (int) với timeout
- 6. Tại sao không có cuộc gọi đến nhà xây dựng?
- 7. Cuộc gọi đồng thời với cuộc trò chuyện
- 8. Cho phép người dùng hủy MBProgressHUD khi cuộc gọi JSON mất quá nhiều thời gian
- 9. Chuyển tiếp cuộc gọi Twilio
- 10. Đợi nhiều cuộc gọi lại
- 11. Các cuộc gọi tiếp theo đến kết quả Mock.Setup trong cùng một cá thể đối tượng
- 12. đo thời gian thực hiện các cuộc gọi dòng lệnh
- 13. Tại sao cuộc gọi SSL_pending này luôn trả về 0?
- 14. Chuyển tiếp cuộc gọi android theo lập trình
- 15. Lỗi: "Cuộc gọi đến mailbox_fql đã vượt quá 300 cuộc gọi mỗi 600 giây"
- 16. Tối ưu hóa các cuộc gọi tiếp theo đến số nguyên và modulo (phần còn lại)
- 17. Theo dõi thời lượng cuộc gọi điện thoại
- 18. Tôi có nên thực hiện các cuộc gọi nhỏ hơn, thường xuyên hơn hay không; hoặc các cuộc gọi lớn hơn thường xuyên hơn?
- 19. try-lock cuộc gọi mutex và các cuộc gọi CAS
- 20. gdb in đẹp với các cuộc gọi hàm trực tiếp
- 21. Cuộc gọi lạ đến modelIdentifierForElementAtIndexPath: inView: (UIDataSourceModelAssociation)
- 22. Làm thế nào để sử dụng strace để chỉ hiển thị các cuộc gọi mất nhiều thời gian?
- 23. C#: Tại sao cuộc gọi hàm nhanh hơn so với nội tuyến thủ công?
- 24. Hủy bỏ cuộc gọi không được quản lý DLL
- 25. Gọi setOnClickListener từ nhiều lớp chỉ dẫn đến một cuộc gọi lại không?
- 26. Ghi đè màn hình cuộc gọi đến?
- 27. Ví dụ về Cuộc gọi theo tên
- 28. Nhiều cuộc gọi WCF đồng thời từ một máy khách đến Dịch vụ
- 29. Tự động trả lời cuộc gọi đến theo chương trình?
- 30. Threading nhiều cuộc gọi không đồng bộ
Bạn thực hiện cuộc gọi bằng mã C++ như thế nào? –
Một câu hỏi hoàn hảo. Có lẽ người dùng không phải Matlab đã đóng nó do sự hiểu lầm. –
Sự hiểu biết của tôi là cách duy nhất để tránh điều này là chuyển đổi mã Matlab thành mã C hoặc C++ bằng [Matlab Coder] (http://www.mathworks.com.au/products/matlab-coder/index.html) và sau đó biên dịch nó từ đó. Như @NominSim chỉ ra, "biên dịch" mã Matlab không thực sự được biên soạn - có một câu trả lời SO tốt về chủ đề này [ở đây] (http://stackoverflow.com/questions/8636267/matlab-code-after-compilation) –