Página 1 de 1

memória com xharbour .99

Enviado: 11 Fev 2021 14:20
por carlos_dornelas
Boa tarde!

Qual a maneira correta de utilizar o hb_gcall ? Aqui no forum mesmo vi hb_gcall(.t.), hb_gcall(.f.) e hb_gcall()... na verdade não vi diferença usando ou não o parametro...

Em um programa especifico, utilizando o xharbour .99 + gtwvw, ocorre esse problema em uma rotina repetitiva. Depois de um tempo, acaba aparecendo
o erro conforme mensagem anexa e o programa aborta..

Alguém tem alguma dica?

[]s

memória com xharbour .99

Enviado: 11 Fev 2021 15:47
por Kapiaba

Código: Selecionar todos

 hb_gcall(.t.) // força a limpeza de basuras(lixo) se tem ou não.

 hb_gcall(.f.)  // força a limpeza, apenas se tiver(recomendado).
Este estouro de pilha, ocorre, principalmente, se a máquina for com windows de 64 bits e com apenas 4 Gbs de RAM. Recomenda-se em windows de 64 bits, um mínimo de 8 Gbs de RAM ou mais, se possível.

Em WHILE... ENDO muito demorados, recomenda-se o uso do SYSREFRESH() -> em FiveWin, veja na sua linguagem, se tem o comando equivalente.

Espero ter ajudado.

Abs.

memória com xharbour .99

Enviado: 11 Fev 2021 16:22
por carlos_dornelas
Obrigado por responder!

Tanto (.t.) quanto (.f.) não funcionou aqui... a memória vai se esvaindo à medida que o do while vai avançando...

Não utilizo o FiveWin, mas você poderia postar essa função SYSREFRESH() aqui para eu analisar?

[]s

Carlos Dornelas

memória com xharbour .99

Enviado: 11 Fev 2021 18:31
por Kapiaba
Desculpe, SYSREFRESH() é uma função própria do FiveWin, e ela não foi disponibilizada pela FiveTech. Mas, mesmo com o FiveWin, usando esta função, se o cliente não colocar 8 Gbs de RAM, o estouro continuará.

Ai, ou usamos uma versão velha do FiveWin compilada com o BCC55, sem os novos Recursos para os novos windows, ou ele aumenta os Pentes de memória RAM. Enfim, o cliente não tem saida, quer modernidade, tem que se adaptar ao mercado. O barato sai caro... Compra uma super máquina com motor de fusca? Não dá, né?

Que BCC está usando? Qual é a memória RAM desta máquina que estoura a pilha? Será que não queimou um Pente?

Não tem como você "quebrar" este WHILE em vários?

Você usa muitas chamadas Recursivas nesta linguagem? Fecha tudo ao sair? Ao fechar programa, dá um CLEAR ALL?

Usa BitMaps? Alguma coisa que poderia estourar a memória? Pois, se o sistema for em MODO CONSOLE, e o BCC for o 55, ele não consome quase nada de memória. Tem que ser outra coisa, algum tipo de recurso usado, tipo uma BITMAP que está corrupta ou com um tamanho absurdo. Investigue mais a fundo, ou nos dê mais detalhes.

Abs.

memória com xharbour .99

Enviado: 11 Fev 2021 19:00
por carlos_dornelas
Desculpe, SYSREFRESH() é uma função própria do FiveWin, e ela não foi disponibilizada pela FiveTech. Mas, mesmo com o FiveWin, usando esta função, se o cliente não colocar 8 Gbs de RAM, o estouro continuará.
Ok, sem problemas. Descobri o que estava "comendo" a memória!

Tinha uma declaração de matriz dentro de um FOR NEXT que por sua vez está dentro de um DO WHILE...

Apenas alterei de DECLARE MATRIZ[8] para MATRIZ:={} e os problemas acabaram!!

Fica aí a dica, se alguém passar pelo mesmo problema. Provavelmente no harbour 3.2 ou 3.4 isso tenha sido resolvido.

[]s

Carlos Dornelas