Migração Clipper para Harbour Ficou Mais Lento
Enviado: 22 Jan 2025 15:57
Pessoal, estou com uma situação no mínimo interessante.
Peguei um sistema legado 16 bits (Clipper 5.02) com 300 fontes (.PRG) e 247 banco de dados (.DBF) para converter para Harbour, consegui fazer numa boa, preservando o máximo do código original, adicionando algumas coisas para fazer funcionar no Harbour, o mínimo indispensável ( SETMODE(25,80), PROC MAIN(), RETURN ) só usei GTWVG para poder ter um pouco de melhoria em alguns recursos, poder expandir, etc... e funcionou, ficou muito bom, rodando em Windows 64bits.
O que ficou estranho é que, ficou mais lento!
Não nota-se quase diferença na navegação, cadastros, etc... mas quando precisa calcular bastante para alguma consulta como: Calculo de comissão de vendedores, aí a coisa fica evidente, no Clipper fica 1,5x mais rápido do que no Harbour para os mesmos dados (exatamente os mesmos DBF).
O código fonte é antigo, de mais de 20 anos, mas funciona, não queria mexer no fonte, mas talvez vou ter que fazer alguma coisa pois ficar mais lento é inaceitável...
Não vou nem postar o código aqui, o desta rotina tem mais de 1000 linhas, é longo, feio e mal estruturado, não foi eu quem fez, mas já estava funcionando 100%, portanto desconfio que seja outro problema.
O que eu fiz até agora para tentar resolver:
Apaguei todos arquivos temporários, apaguei todos os ínices (.NTX) - eram 470 no total.
Gerei todos NTX de novo no Harbour (talvez ajudasse pois nos cálculos ele gera arquivos temporários em DBF).
Compilei em 64 bits, depois em 32 bits, rodei no Windows 10, consegui uma máquina antiga com Windows 7 32bits (lá fiz a comparação), rodei até em Windows Server 2003 R2, em todos os casos não alterou a diferença de velocidade (mudava o seguinte, se o computador for muito veloz, fica proporcionalmente mais veloz, se o computador for lentão, fica proporcionalmente lentão, mas o Clipper em todos os casos foi bem mais rápido...)
Resultado das minhas tentativas: Não ajudou... Alguém já passou por algo assim? Lembra de alguma coisa que eu precisaria me atentar? Alguma dica?
A última possibilidade tem haver com o modo de apresentação do programa, em Clipper o sistema mostra caracteres DOS puro, super econômico nos recursos, no Harbour, uma janela Windows é "emulada", com a aparência original do Clipper - ficou bem parecido (digamos assim para simplificar), pensei que por esta razão, quando está fazendo os cálculos de comissão, fica mostrando um monte de valores que estão sendo calculados na tela e esta "atualização" de milhares de números calculados poderia ser a razão do aumento no consumo de tempo? Seria essa uma possível razão? Achei que poderia ser... alguém já viu isso?
Eu não queria ficar analisando o código legado... tentar reprogramar para otimizar... parece inviável para o caso, então sendo que o mesmo código que funciona no Clipper não deveria ficar no mínimo igual, em termos de velocidade, no Harbour? Compilei em 32 e em 64 bits, não melhorou nada.
Pois é... eu descobri uma coisa... compilando em GTWIN (ou sem GT, deixando padrão), o código ficou igual ao Clipper em aparência e velocidade (igualzinho).
Agora, mudou a GT para qualquer coisinha um pouco melhor, pronto, já ficou 30% mais lento em média... fiquei surpreso com isso!
Essa acabou sendo a solução!
Confesso que fiquei triste que tentar melhorar um pouco a aparência, dando uns recursos extras mínimos, deixa mais lento em virtude de atualização de informação na tela... Mas talvez alguém tenha alguma dica de como conseguir consciliar as duas coisas.
Peguei um sistema legado 16 bits (Clipper 5.02) com 300 fontes (.PRG) e 247 banco de dados (.DBF) para converter para Harbour, consegui fazer numa boa, preservando o máximo do código original, adicionando algumas coisas para fazer funcionar no Harbour, o mínimo indispensável ( SETMODE(25,80), PROC MAIN(), RETURN ) só usei GTWVG para poder ter um pouco de melhoria em alguns recursos, poder expandir, etc... e funcionou, ficou muito bom, rodando em Windows 64bits.
O que ficou estranho é que, ficou mais lento!
Não nota-se quase diferença na navegação, cadastros, etc... mas quando precisa calcular bastante para alguma consulta como: Calculo de comissão de vendedores, aí a coisa fica evidente, no Clipper fica 1,5x mais rápido do que no Harbour para os mesmos dados (exatamente os mesmos DBF).
O código fonte é antigo, de mais de 20 anos, mas funciona, não queria mexer no fonte, mas talvez vou ter que fazer alguma coisa pois ficar mais lento é inaceitável...
Não vou nem postar o código aqui, o desta rotina tem mais de 1000 linhas, é longo, feio e mal estruturado, não foi eu quem fez, mas já estava funcionando 100%, portanto desconfio que seja outro problema.
O que eu fiz até agora para tentar resolver:
Apaguei todos arquivos temporários, apaguei todos os ínices (.NTX) - eram 470 no total.
Gerei todos NTX de novo no Harbour (talvez ajudasse pois nos cálculos ele gera arquivos temporários em DBF).
Compilei em 64 bits, depois em 32 bits, rodei no Windows 10, consegui uma máquina antiga com Windows 7 32bits (lá fiz a comparação), rodei até em Windows Server 2003 R2, em todos os casos não alterou a diferença de velocidade (mudava o seguinte, se o computador for muito veloz, fica proporcionalmente mais veloz, se o computador for lentão, fica proporcionalmente lentão, mas o Clipper em todos os casos foi bem mais rápido...)
Resultado das minhas tentativas: Não ajudou... Alguém já passou por algo assim? Lembra de alguma coisa que eu precisaria me atentar? Alguma dica?
A última possibilidade tem haver com o modo de apresentação do programa, em Clipper o sistema mostra caracteres DOS puro, super econômico nos recursos, no Harbour, uma janela Windows é "emulada", com a aparência original do Clipper - ficou bem parecido (digamos assim para simplificar), pensei que por esta razão, quando está fazendo os cálculos de comissão, fica mostrando um monte de valores que estão sendo calculados na tela e esta "atualização" de milhares de números calculados poderia ser a razão do aumento no consumo de tempo? Seria essa uma possível razão? Achei que poderia ser... alguém já viu isso?
Eu não queria ficar analisando o código legado... tentar reprogramar para otimizar... parece inviável para o caso, então sendo que o mesmo código que funciona no Clipper não deveria ficar no mínimo igual, em termos de velocidade, no Harbour? Compilei em 32 e em 64 bits, não melhorou nada.
Pois é... eu descobri uma coisa... compilando em GTWIN (ou sem GT, deixando padrão), o código ficou igual ao Clipper em aparência e velocidade (igualzinho).
Agora, mudou a GT para qualquer coisinha um pouco melhor, pronto, já ficou 30% mais lento em média... fiquei surpreso com isso!
Essa acabou sendo a solução!
Confesso que fiquei triste que tentar melhorar um pouco a aparência, dando uns recursos extras mínimos, deixa mais lento em virtude de atualização de informação na tela... Mas talvez alguém tenha alguma dica de como conseguir consciliar as duas coisas.