Das hört sich vielleicht komisch an, aber in meiner Abteilung haben wir Probleme mit der folgenden Situation:
Wir arbeiten hier an einer Serveranwendung, die immer größer wird, auch wenn wir überlegen, sie in verschiedene Teile (DLL-Dateien) aufzuteilen, bei Bedarf dynamisch zu laden und anschließend zu entladen, um damit umgehen zu können die Leistungsprobleme.
Aber: Die von uns verwendeten Funktionen übergeben Eingabe- und Ausgabeparameter als STL-Objekte, und wie in einer Stack Overflow-Antwort erwähnt , ist dies eine sehr schlechte Idee. (Der Beitrag enthält einige ± Lösungen und Hacks, aber alles sieht nicht sehr solide aus.)
Natürlich könnten wir die Eingabe- / Ausgabeparameter durch Standard-C ++ - Typen ersetzen und STL-Objekte aus denen erstellen, die sich einmal in den Funktionen befinden. Dies könnte jedoch zu Leistungseinbußen führen.
Ist es in Ordnung zu folgern, dass Sie STL überhaupt nicht als Technologie verwenden dürfen, wenn Sie überlegen, eine Anwendung zu erstellen, die möglicherweise so groß wird, dass ein einzelner PC nicht mehr damit umgehen kann?
Weitere Hintergrundinformationen zu dieser Frage:
Es scheinen einige Missverständnisse in Bezug auf die Frage zu bestehen: Es handelt sich um das folgende Problem:
Meine Anwendung verbraucht sehr viel Leistung (CPU, Speicher), um ihre Arbeit abzuschließen, und ich möchte diese Arbeit aufteilen Da das Programm bereits in mehrere Funktionen unterteilt ist, ist es nicht so schwierig, einige DLLs aus meiner Anwendung zu erstellen und einige der Funktionen in die Exporttabelle dieser DLLs aufzunehmen. Dies würde zu folgender Situation führen:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 ist die auf Computer1 installierte Instanz der Anwendung, während App_Inst2 die auf Computer2 installierte Instanz derselben Anwendung ist.
DLL1.x ist eine DLL, die auf Machine1 installiert ist, während DLL2.x eine DLL ist, die auf Machine2 installiert ist.
DLLx.1 deckt die exportierte Funktion1 ab.
DLLx.2 deckt die exportierte Funktion2 ab.
Jetzt möchte ich auf Maschine1 Funktion1 und Funktion2 ausführen. Ich weiß, dass dies Machine1 überlasten wird, daher möchte ich eine Nachricht an App_Inst2 senden und diese Anwendungsinstanz auffordern, function2 auszuführen.
Die Eingabe- / Ausgabeparameter von function1 und function2 sind STL-Objekte (C ++ Standard Type Library), und ich erwarte, dass der Kunde regelmäßig Aktualisierungen von App_Inst1, App_Inst2, DLLx.y durchführt (aber nicht alle, der Kunde aktualisiert möglicherweise Machine1, aber nicht Machine2, oder aktualisieren Sie nur die Anwendungen, aber nicht die DLLs oder umgekehrt, ...). Wenn sich die Schnittstelle (Eingabe- / Ausgabeparameter) ändert, ist der Kunde offensichtlich gezwungen, vollständige Upgrades durchzuführen.
Wie in der angegebenen StackOverflow-URL erwähnt, kann jedoch eine einfache Neukompilierung von App_Inst1 oder einer der DLLs dazu führen, dass das gesamte System auseinanderfällt. Daher mein ursprünglicher Titel dieses Beitrags, in dem die Verwendung von STL (C ++ Standard Template) nicht empfohlen wird Bibliothek) für große Anwendungen.
Ich hoffe, dass ich hiermit einige Fragen / Zweifel ausgeräumt habe.