memória com xharbour .99

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

memória com xharbour .99

Mensagem 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
Anexos
error 9009.jpg
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

memória com xharbour .99

Mensagem 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.
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

memória com xharbour .99

Mensagem 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
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

memória com xharbour .99

Mensagem 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.
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

memória com xharbour .99

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