Questa potrebbe sembrare una domanda strana, ma nel mio reparto abbiamo problemi con la seguente situazione:
Lavoriamo qui su un'applicazione server, che sta diventando sempre più grande, anche al punto che stiamo pensando di suddividerla in parti diverse (file DLL), caricando dinamicamente quando necessario e scaricando in seguito, per essere in grado di gestire i problemi di prestazioni.
Ma: le funzioni che stiamo usando, stanno passando i parametri di input e output come oggetti STL e come menzionato in una risposta Overflow dello stack , questa è una pessima idea. (Il post contiene alcune ± soluzioni e hack, ma non sembra tutto molto solido.)
Ovviamente potremmo sostituire i parametri di input / output con i tipi standard di C ++ e creare oggetti STL da quelli una volta all'interno delle funzioni, ma questo potrebbe causare cali di prestazioni.
Va bene concludere che, nel caso in cui si stia pensando di creare un'applicazione, che potrebbe crescere così grande che un singolo PC non può più gestirlo, non si deve assolutamente usare STL come tecnologia?
Ulteriori informazioni su questa domanda:
Sembra che ci siano dei malintesi sulla domanda: il problema è il seguente:
La mia applicazione utilizza enormi quantità di prestazioni (CPU, memoria) per completare il suo lavoro e vorrei dividere questo lavoro in parti diverse (poiché il programma è già suddiviso in più funzioni), non è difficile creare DLL fuori 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 esportata1.
DLLx.2 copre la funzione esportata2.
Ora su Machine1 mi piacerebbe eseguire function1 e function2. So che questo sovraccaricherà Machine1, quindi mi piacerebbe inviare un messaggio a App_Inst2, chiedendo all'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 faccia gli 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, allora il cliente è costretto a fare aggiornamenti completi.
Tuttavia, come menzionato nell'URL StackOverflow, una semplice ricompilazione di App_Inst1 o di una delle DLL potrebbe causare l'intero sistema a crollare, da qui il mio titolo originale di questo post, sconsiderando l'uso di STL ( Libreria di modelli standard C ++) per applicazioni di grandi dimensioni.
Spero di aver risolto alcune domande / dubbi.