Potrebbe sembrare una domanda strana, ma nel mio dipartimento abbiamo problemi con la seguente situazione:
Stiamo lavorando su un'applicazione server, che sta diventando sempre più grande, anche nel momento in cui stiamo considerando di dividerlo in parti diverse (file DLL), caricando dinamicamente quando necessario e scaricandolo in seguito, al fine di essere in grado di gestire i problemi di prestazione.
Ma: le funzioni che stiamo usando, stanno passando parametri di input e output come oggetti STL, e come menzionato in una risposta Stack Overflow , questa è una pessima idea. (Il post contiene alcune soluzioni ± e hack, ma non sembra molto solido.)
Ovviamente potremmo sostituire i parametri di input / output con tipi C ++ standard e creare oggetti STL da quelli che si trovavano all'interno delle funzioni, ma ciò potrebbe causare un calo delle prestazioni.
Va bene concludere che, nel caso in cui si stia considerando di creare un'applicazione, che potrebbe diventare così grande che un singolo PC non è più in grado di gestirla, non è necessario utilizzare STL come tecnologia?
Ulteriori informazioni su questa domanda:
sembrano esserci dei malintesi sulla domanda: il problema è il seguente: La
mia applicazione sta usando enormi quantità di prestazioni (CPU, memoria) per completare il suo lavoro e vorrei dividere questo lavoro in diverse parti (poiché il programma è già suddiviso in più funzioni), non è così difficile creare alcune DLL dalla mia applicazione e inserire alcune delle funzioni nella tabella di esportazione di tali DLL. Ciò comporterebbe la seguente situazione:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 è l'istanza dell'applicazione, installata su Machine1, mentre App_Inst2 è l'istanza della stessa applicazione, installata su Machine2.
DLL1.x è una DLL, installata su Machine1, mentre DLL2.x è una DLL, installata su Machine2.
DLLx.1 copre la funzione esportata 1.
DLLx.2 copre la funzione esportata2.
Ora su Machine1 mi piacerebbe eseguire function1 e function2. So che questo sovraccaricherà Machine1, quindi vorrei inviare un messaggio ad App_Inst2, chiedendo a quell'istanza dell'applicazione di eseguire function2.
I parametri di input / output di function1 e function2 sono oggetti STL (C ++ Standard Type Library) e regolarmente potrei aspettarmi che il cliente esegua aggiornamenti di App_Inst1, App_Inst2, DLLx.y (ma non tutti, il cliente potrebbe aggiornare Machine1 ma non Machine2, o solo aggiornare le applicazioni ma non le DLL o viceversa, ...). Ovviamente se l'interfaccia (parametri di input / output) cambia, il cliente è costretto a fare aggiornamenti completi.
Tuttavia, come menzionato nell'URL StackOverflow indicato, una semplice ricompilazione di App_Inst1 o di una delle DLL potrebbe causare la caduta dell'intero sistema, quindi il mio titolo originale di questo post, sconsigliare l'utilizzo di STL (modello standard C ++ Libreria) per grandi applicazioni.
Spero di aver chiarito alcune domande / dubbi.