2012-12-18 45 views
5

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?

+0

Bạn thực hiện cuộc gọi bằng mã C++ như thế nào? –

+3

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. –

+0

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) –

Trả lời

3

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.

+1

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. –

+0

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 Initialize(). – user1913557

+0

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

Các vấn đề liên quan