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?
Odpowiedz
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".
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. –
Myślałem, że opóźnienie od uruchomienia Matlab Runtime Compiler jest gdzieś w call do mclInitializeApplication lub
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
- 1. Dlaczego UPDATE trwa znacznie dłużej niż SELECT?
- 2. Dlaczego kompilacja przez MSBuild trwa dłużej niż przez IDE?
- 3. Visual Studio 2012 Zdalna operacja trwa dłużej niż oczekiwano
- 4. Dynamiczny SQL trwa znacznie dłużej niż zakodowany odpowiednik
- 5. Zachowanie timera, gdy wykonanie trwa dłużej niż zakres?
- 6. zapytań SQL Server trwa dłużej niż z parametrem stałym ciągiem
- 7. Dlaczego owijanie tego w funkcję trwa 10 razy dłużej?
- 8. Dlaczego wyszukiwanie w posortowanej liście w python trwa dłużej?
- 9. Dlaczego importowanie funkcji z modułu trwa dłużej niż cały sam moduł?
- 10. Meteor 1.0 - dlaczego "Budowanie aplikacji" trwa o wiele dłużej niż kiedyś?
- 11. Dlaczego kopiowanie kolumny tablicy 2D według kolumny trwa dłużej niż wiersz po wierszu w C?
- 12. Wywołanie metody VB6 z biblioteki .NET DLL
- 13. Pierwsze wywołanie usługi sieci .net jest powolne.
- 14. Czy wykonanie metody pobranej przez odbicie trwa dłużej?
- 15. onPageFinished trwa dłużej niż 2 minuty, gdy adres URL dostępne bezpośrednio
- 16. Utworzyć DLL z MATLAB
- 17. C# Jak zatrzymać metodę, jeśli trwa to dłużej niż 2 sekundy?
- 18. Heroku: Mam prośbę, która trwa dłużej niż 30 sekund i łamie się
- 19. Kwerenda trwa 4800x dłużej, gdy uruchamiany z programu C++ niż z SQL Plus
- 20. Raport SSRS trwa dłużej niż zapytanie; wypróbowany parametr sniffing i poprawki nolock
- 21. Jak znaleźć konwencję wywołania biblioteki DLL innej firmy?
- 22. W MATLAB istnieje (x, "plik") trwa wiecznie
- 23. Możliwe wywołanie zarządzanej biblioteki DLL z niezarządzanego C++?
- 24. Wywołanie biblioteki DLL Delphi z aplikacji C# .NET
- 25. Wywołanie biblioteki dll z C++, C# i ruby
- 26. Jak zamienić pierwsze 2 kolejne bity
- 27. Funkcja Dll jest szybsza niż normalne wywołanie funkcji?
- 28. Przyspieszenie wywołania Matlab Engine
- 29. Jak utworzyć biblioteki DLL w programie Matlab i używać tych bibliotek DLL w aplikacjach .Net
- 30. Dlaczego liczenie do 2^24 wykonuje się szybko, ale liczenie do 2^25 trwa znacznie dłużej?
W jaki sposób nawiązywane są połączenia w kodzie C++? –
Idealne pytanie. Prawdopodobnie użytkownicy, którzy nie są Matlabem, zamknęli go z powodu nieporozumień. –
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) –