Fórum Alocação de Memória DATASNAP #487236

29/07/2014

0

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

Responder

Posts

20/04/2015

Marcos Rodrigues

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?
Responder

Gostei + 0

20/04/2015

Alisson Santos

Boa noite pessoal, Estão utilizando o Rest ou o DataSnap nativo?
Responder

Gostei + 0

21/04/2015

Marcos Rodrigues

Não estou utilizando DataSnap Rest, mas o DataSnap Server TCP/IP na porta 211
Responder

Gostei + 0

09/07/2015

Efraim Sousa

Marcos Soares, conseguiu resolver?? Estou passando pelo mesmo problema :S :S
Responder

Gostei + 0

09/07/2015

Marcos Rodrigues

Não consegui resolver. Mudei para DataSnap Rest e melhorou bastante. Ainda preciso fazer mais testes.
Responder

Gostei + 0

09/02/2017

Scv Sistemas

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.
Responder

Gostei + 0

05/08/2017

Lorival Filho

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?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar