Może to zabrzmieć jako dziwne pytanie, ale w moim dziale mamy problemy z następującą sytuacją:
Pracujemy tutaj nad aplikacją serwerową, która staje się coraz większa, nawet w momencie, gdy rozważamy podzielenie jej na różne części (pliki DLL), dynamiczne ładowanie w razie potrzeby, a następnie rozładowywanie, aby móc obsłużyć problemy z wydajnością.
Ale: funkcje, których używamy, przekazują parametry wejściowe i wyjściowe jako obiekty STL, i jak wspomniano w odpowiedzi na przepełnienie stosu , jest to bardzo zły pomysł. (Post zawiera kilka ± rozwiązań i hacków, ale nie wszystko wygląda solidnie).
Oczywiście moglibyśmy zastąpić parametry wejściowe / wyjściowe standardowymi typami C ++ i tworzyć obiekty STL z tych, które znajdują się w funkcjach, ale może to powodować spadek wydajności.
Czy można stwierdzić, że jeśli rozważasz zbudowanie aplikacji, która może wzrosnąć tak bardzo, że jeden komputer nie będzie w stanie jej obsługiwać, nie możesz w ogóle używać STL jako technologii?
Więcej informacji na temat tego pytania:
Wydaje się, że istnieją pewne nieporozumienia dotyczące pytania: problem jest następujący:
Moja aplikacja wykorzystuje ogromną wydajność (procesor, pamięć) w celu dokończenia pracy i chciałbym podzielić tę pracę na różne części (ponieważ program jest już podzielony na wiele funkcji), tworzenie bibliotek DLL z mojej aplikacji i umieszczanie niektórych funkcji w tabeli eksportu tych bibliotek nie jest trudne. Spowodowałoby to następującą sytuację:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 to instancja aplikacji zainstalowanej na komputerze Machine1, natomiast App_Inst2 to instancja tej samej aplikacji zainstalowanej na komputerze Machine2.
DLL1.x jest biblioteką DLL zainstalowaną na komputerze Machine1, natomiast DLL2.x jest biblioteką DLL zainstalowaną na komputerze Machine2.
DLLx.1 obejmuje eksportowaną funkcję 1.
DLLx.2 obejmuje funkcję eksportu2.
Teraz na maszynie 1 chciałbym wykonać funkcję 1 i funkcję 2. Wiem, że spowoduje to przeciążenie Machine1, dlatego chciałbym wysłać wiadomość do App_Inst2, prosząc tę instancję aplikacji o wykonanie funkcji 2.
Parametry wejściowe / wyjściowe funkcji1 i funkcji2 są obiektami STL (C ++ Standard Type Library) i regularnie mogę oczekiwać, że klient dokona aktualizacji App_Inst1, App_Inst2, DLLx.y (ale nie wszystkie z nich, klient może zaktualizować Machine1, ale nie Machine2, lub tylko aktualizuj aplikacje, ale nie biblioteki DLL lub odwrotnie, ...). Oczywiście, jeśli interfejs (parametry wejściowe / wyjściowe) ulegnie zmianie, wówczas klient jest zmuszony dokonać kompletnych aktualizacji.
Jednak, jak wspomniano w odnośnym adresie URL StackOverflow, prosta ponowna kompilacja App_Inst1 lub jednej z bibliotek DLL może spowodować rozpad całego systemu, stąd mój oryginalny tytuł tego postu, odradzający użycie STL (Standardowy szablon C ++ Biblioteka) dla dużych aplikacji.
Mam nadzieję, że niniejszym wyjaśniłem niektóre pytania / wątpliwości.