Isso pode parecer uma pergunta estranha, mas no meu departamento estamos tendo problemas com a seguinte situação:
Estamos trabalhando aqui em um aplicativo de servidor, que está crescendo cada vez mais, mesmo no momento em que estamos pensando em dividi-lo em diferentes partes (arquivos DLL), carregando dinamicamente quando necessário e descarregando posteriormente, para poder lidar com os problemas de desempenho.
Mas: as funções que estamos usando estão transmitindo parâmetros de entrada e saída como objetos STL e, como mencionado em uma resposta de estouro de pilha , essa é uma péssima idéia. (A postagem contém algumas soluções e hacks, mas tudo não parece muito sólido.)
Obviamente, poderíamos substituir os parâmetros de entrada / saída por tipos C ++ padrão e criar objetos STL a partir daqueles que estavam dentro das funções, mas isso pode estar causando queda no desempenho.
Tudo bem concluir que, caso você esteja pensando em construir um aplicativo, que pode crescer tanto que um único PC não aguenta mais, você não deve usar o STL como uma tecnologia?
Mais informações sobre esta questão:
Parece haver alguns mal-entendidos sobre a questão: o problema é o seguinte:
Meu aplicativo está usando uma quantidade enorme de desempenho (CPU, memória) para concluir seu trabalho, e eu gostaria de dividir este trabalho em partes diferentes (como o programa já está dividido em várias funções), não é tão difícil criar algumas DLLs fora do meu aplicativo e colocar algumas das funções na tabela de exportação dessas DLLs. Isso resultaria na seguinte situação:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 é a instância do aplicativo, instalada na Máquina1, enquanto App_Inst2 é a instância do mesmo aplicativo, instalada na Máquina2.
DLL1.x é uma DLL, instalada na Máquina1, enquanto DLL2.x é uma DLL, instalada na Máquina2.
DLLx.1 abrange a função exportada1.
DLLx.2 abrange a função exportada2.
Agora na Machine1 eu gostaria de executar function1 e function2. Sei que isso sobrecarregará o Machine1, portanto, gostaria de enviar uma mensagem para App_Inst2, solicitando que a instância do aplicativo execute a função2.
Os parâmetros de entrada / saída de function1 e function2 são objetos STL (C ++ Standard Type Library), e regularmente posso esperar que o cliente faça atualizações de App_Inst1, App_Inst2, DLLx.y (mas não todos, o cliente pode atualizar o Machine1, mas não Machine2, ou apenas atualize os aplicativos, mas não as DLLs ou vice-versa, ...). Obviamente, se a interface (parâmetros de entrada / saída) mudar, o cliente será forçado a fazer atualizações completas.
No entanto, como mencionado no URL StackOverflow referido, uma simples recompilação de App_Inst1 ou de uma das DLLs pode fazer com que todo o sistema desmorone, portanto, meu título original desta postagem, desaconselha o uso de STL (C ++ Standard Template Library) para grandes aplicações.
Espero que, por este meio, tenha esclarecido algumas dúvidas / dúvidas.