Cela peut sembler une question étrange, mais dans mon département, nous avons des problèmes avec la situation suivante:
Nous travaillons ici sur une application serveur, qui s'agrandit de plus en plus, même au moment où nous envisageons de la diviser en différentes parties (fichiers DLL), en chargeant dynamiquement en cas de besoin et en déchargeant par la suite, afin de pouvoir gérer les problèmes de performance.
Mais: les fonctions que nous utilisons passent des paramètres d'entrée et de sortie en tant qu'objets STL, et comme mentionné dans une réponse Stack Overflow , c'est une très mauvaise idée. (Le message contient quelques ± solutions et hacks, mais tout ne semble pas très solide.)
Évidemment, nous pourrions remplacer les paramètres d'entrée / sortie par des types C ++ standard et créer des objets STL à partir de ceux une fois à l'intérieur des fonctions, mais cela pourrait entraîner des baisses de performances.
Est-il correct de conclure que, si vous envisagez de créer une application, qui pourrait devenir si grande qu'un seul PC ne peut plus la gérer, vous ne devez pas du tout utiliser STL comme technologie?
Plus d'informations sur cette question:
il semble y avoir des malentendus sur la question: le problème est le suivant:
mon application utilise une énorme quantité de performances (CPU, mémoire) afin de terminer son travail, et je voudrais diviser ce travail en différentes parties (comme le programme est déjà divisé en plusieurs fonctions), il n'est pas si difficile de créer des DLL à partir de mon application et de mettre certaines des fonctions dans la table d'exportation de ces DLL. Cela entraînerait la situation suivante:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 est l'instance de l'application, installée sur Machine1, tandis que App_Inst2 est l'instance de la même application, installée sur Machine2.
DLL1.x est une DLL, installée sur Machine1, tandis que DLL2.x est une DLL, installée sur Machine2.
DLLx.1 couvre la fonction exportée 1.
DLLx.2 couvre la fonction exportée2.
Maintenant, sur Machine1, j'aimerais exécuter function1 et function2. Je sais que cela surchargera Machine1, donc je voudrais envoyer un message à App_Inst2, demandant à cette instance d'application d'exécuter function2.
Les paramètres d'entrée / sortie de function1 et function2 sont des objets STL (C ++ Standard Type Library), et régulièrement je pourrais m'attendre à ce que le client fasse des mises à jour d'App_Inst1, App_Inst2, DLLx.y (mais pas tous, le client peut mettre à niveau Machine1 mais pas Machine2, ou seulement mettre à niveau les applications mais pas les DLL ou vice versa, ...). Évidemment, si l'interface (paramètres d'entrée / sortie) change, le client est obligé de procéder à des mises à niveau complètes.
Cependant, comme mentionné dans l'URL StackOverflow référencée, une simple recompilation d'App_Inst1 ou de l'une des DLL peut entraîner l'effondrement de l'ensemble du système, d'où mon titre d'origine de cet article, déconseillant l'utilisation de STL (C ++ Standard Template Library) pour les grandes applications.
J'espère que par la présente, j'ai dissipé certaines questions / doutes.