Alocação de Memória DATASNAP

Delphi

29/07/2014

Boa tarde

Temos uma aplicação multicamadas com Datasnap e estamos com um problema com relação à alocação de memória no servidor.
Ao subir os clients, a memória alocada para o server vai subindo, porém ao fechar esses clientes, a memória do servidor não é liberada.

Fizemos testes com os LifeCycles tipo Session e Invocation e o resultado não foi alterado.
Debugamos e vimos que as sessões estão sendo liberadas, porém a memória do server continua a mesma.

Alguém já passou por isso?
Fernando Papile

Fernando Papile

Curtidas 0

Respostas

Marcos Rodrigues

Marcos Rodrigues

29/07/2014

Pessoal, alguém sabe a solução para esse problema? Estou com o mesmo problema.
Estou utilizando o lifeCycle como Server.
Em meu ServerMethod, tenho cerca de 15 FDQuery cada uma ligadas ao seu DatasetProvider.
No cliente uso ClientDataSet ligado a um DSProviderConnection1 ligado a um SqlConnection.

A cada aplicação cliente que abro o "Server.exe" vai ganhando Kilobytes e não libera quando encerro a aplicação.
Às vezes o servidor trava.

Existe algum procedimento a fazer do lado do servidor para liberar esses recursos?
GOSTEI 0
Alisson Santos

Alisson Santos

29/07/2014

Boa noite pessoal, Estão utilizando o Rest ou o DataSnap nativo?
GOSTEI 0
Marcos Rodrigues

Marcos Rodrigues

29/07/2014

Não estou utilizando DataSnap Rest, mas o DataSnap Server TCP/IP na porta 211
GOSTEI 0
Efraim Sousa

Efraim Sousa

29/07/2014

Marcos Soares, conseguiu resolver?? Estou passando pelo mesmo problema :S :S
GOSTEI 0
Marcos Rodrigues

Marcos Rodrigues

29/07/2014

Não consegui resolver. Mudei para DataSnap Rest e melhorou bastante. Ainda preciso fazer mais testes.
GOSTEI 0
Scv Sistemas

Scv Sistemas

29/07/2014

Olá, bom também uso aplicações datasnap e passei pelo mesmo problema, a solução que encontrei foi criar uma procedure que faz a limpeza de resíduos.

procedure LimpaMemoria;
var
   MainHandle : THandle;
begin
 try
   MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
   SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
   CloseHandle(MainHandle);
 except
 end;
  Application.ProcessMessages;
end;


crie esta procedure coloque ela no Create e no Destroy do seu ServerMethods.
GOSTEI 0
Lorival Filho

Lorival Filho

29/07/2014

Está trabalhando da mesma maneira ou achou outra solução. Vi em outro lugar que na verdade essa solução fixa o máximo de memória. Hoje eu tenho umas 30 conexões no meu servidor e acabou chegando a quase 1GB de alocação de memória. Analisando com calma vi que o que faz alocar mais memória é uma função que retorna um JsonArray (na verdade um arquivo PDF dentro dele). Algo novo?
GOSTEI 0
POSTAR