2012-12-18 17 views
5

Wywołuję z mojego kodu C++ DLL, który został napisany w MATLAB. Obserwuję dziwny efekt: pierwsze połączenie zajmuje znacznie więcej czasu niż kolejne połączenia. Trwa 3-4 razy więcej. Czy to normalne? Czy można coś z tym zrobić?Dlaczego pierwsze wywołanie biblioteki Matlab DLL trwa dłużej niż kolejne wywołania?

+0

W jaki sposób nawiązywane są połączenia w kodzie C++? –

+3

Idealne pytanie. Prawdopodobnie użytkownicy, którzy nie są Matlabem, zamknęli go z powodu nieporozumień. –

+0

Moje zrozumienie jest jedyną metodą uniknięcia tego jest zamiana kodu Matlab na kod C lub C++ przy użyciu [Matlab Coder] (http://www.mathworks.com.au/products/matlab-coder/index.html) i następnie skompiluj go stamtąd. Jak zauważa @NominSim, "skompilowany" kod Matlaba nie jest właściwie skompilowany - istnieje dobra odpowiedź na ten temat [tutaj] (http://stackoverflow.com/questions/8636267/matlab-code-after-compilation) –

Odpowiedz

3

Tak, to jest normalne, opóźnienie pochodzi z uruchomienia MATLAB Runtime Compiler. To właśnie uruchamia kod MATLAB z biblioteki dll, która została utworzona przez MATLAB. Początkowego uruchomienia nie można uniknąć AFAIK, ale może być możliwe dodanie fałszywego połączenia do biblioteki DLL po uruchomieniu aplikacji, aby uniknąć późniejszego "kosztu".

+1

Ponieważ pytanie jest zablokowane, dodam to jako komentarz. Są to dwa typy opóźnień - pierwszy po uruchomieniu aplikacji po raz pierwszy * kiedykolwiek * na tym komputerze, a następnie plik ZIP jest rozpakowywany i uruchamiany jest MCR. Drugi typ polega na tym, że już raz uruchomiłeś tę aplikację. Następnie ładowany jest tylko MCR. –

+0

Myślałem, że opóźnienie od uruchomienia Matlab Runtime Compiler jest gdzieś w call do mclInitializeApplication lub Initialize(). – user1913557

+0

Jeśli mam kilka funkcji MATLAB w kilku bibliotekach DLL, oznacza to, że takie opóźnienie będzie przy pierwszym wywołaniu każdej funkcji? – user1913557

Powiązane problemy