Página 1 de 1
Lentidão na criação de indices em HARBOUR!
Enviado: 13 Jul 2015 11:38
por ANDRIL
Pessoal, passei meu sistema Clipper52/Blinker para Harbour 3.2 modo CONSOLE. Sempre usei DBFCDX, porem em clipper usava a extensao IDX. No Harbour, deixei como CDX mesmo. Não uso TAGs.
O que notei foi uma grande demora para criação dos indices em Harbour, o que em Clipper demorava em torno de 45seg, em Harbour demorou mais de 5 min.
Será que fiz algo errado na criação dos indices para deixá-los tão lentos? Tem alguma forma de deixá-los rápidos na criação como em Clipper.
O cliente já ficou com o pé atrás, visto que sempre que se faz algo como UPGRADE espera-se que melhore!
Ate+
Lentidão na criação de indices em HARBOUR!
Enviado: 13 Jul 2015 14:52
por JoséQuintas
A única coisa que poderia ficar mais lenta no Harbour seria atualização de tela.
Por acaso tem gráfico de processamento?
Se tiver, ajuste pra não ficar atualizando a tela a cada registro.
Lentidão na criação de indices em HARBOUR!
Enviado: 14 Jul 2015 09:54
por ANDRIL
José, tem sim. Realmente era o uso de função de andamento na criação do índice. O interessante é que a mesma função no Clipper roda bem, já no Harbour apresenta tal lerdeza!
Fiquei aliviado quando tirei a função e ficou até mais rápido que em Clipper. Agora vou ver como criu uma alternativa, para informar ao usuário que o sistema esta trabalhando, por que quando o índice for grande eles sempre pensam que o sistema "TRAVOU!".
Obrigado, até+
Lentidão na criação de indices em HARBOUR!
Enviado: 14 Jul 2015 20:36
por JoséQuintas
Uma alternativa simples é atualizar somente a cada um segundo.
Se quiser minha rotina com cálculo de tempo.
Em harbourdoc.com.br, user interface,
www.harbourdoc.com.br, GrafTime()
link direto:
http://www.harbourdoc.com.br/show.asp?s ... GrafTime()
Basicamente pra usar poderia ser:
Código: Selecionar todos
GrafTime( "Fazendo reindexação" )
INDEX ON .... TO ... EVAL GrafTime( RecNo(), LastRec() )
ou
Código: Selecionar todos
nAtual := 0
nTotal := LastRec()
GrafTtime( "Fazendo processamento" )
DO WHILE .NOT. Eof()
GrafTime( nAtual++, nTotal )
SKIP
ENDDO
A rotina usa as duas últimas linhas da tela para o gráfico.
Nota:
Já comentei por aqui, a coisa mais difícil de eu fazer é reindexar.
Se ocorrer uma vez cada dois meses, pra mim ainda considero muito, já que é bem eventual mesmo.
Sempre foi assim, desde os tempos do Clipper.
Aqui uso um cálculo de LastRec() + ( LastRec() * Qtd. índices ), somando de todos os arquivos, pra ter um gráfico da reindexação total, e não individual. (a reindexação também faz o "pack")
Lentidão na criação de indices em HARBOUR!
Enviado: 14 Jul 2015 21:44
por Itamar M. Lins Jr.
Use comando index com EVERY! mais simples e vai ficar muito rápido.
Só o every ou outra forma similar; chamar o gráfico a cada n registros processados n pode ser 50 ou 100...
Evite chamar o gráfico a cada skip do dbf.
Saudações,
Itamar M. Lins Jr.
Lentidão na criação de indices em HARBOUR!
Enviado: 14 Jul 2015 22:44
por ANDRIL
Pessoal, obrigado pelas dicas. Vou fazer alguns testes e reporto aqui.
Ate+
Lentidão na criação de indices em HARBOUR!
Enviado: 15 Jul 2015 10:26
por JoséQuintas
Essa rotina que fiz afeta muito menos a velocidade do que o gráfico a cada registro, porque a demora maior é mesmo atualização de tela e rede.
Mas usando o every junto com a rotina vai agilizar mais ainda, porque reduz a quantidade de cálculos/checagens.
Lentidão na criação de indices em HARBOUR!
Enviado: 15 Jul 2015 11:09
por ANDRIL
Usei a claúsula EVAL junto com EVERY usando a mesma função que já usava e funcionou como em Clipper. Realmente em Harbour a atualização da tela demora mais que em Clipper se for atualiza-la a cada registro, mesmo compilando em modo console.
Questão resolvida. Obrigado a todos.
Ate+
Lentidão na criação de indices em HARBOUR!
Enviado: 15 Jul 2015 12:36
por alxsts
Olá!
Só acrescentando: pode usar o Every a cada 10% dos registros da tabela [ Int( ( LatRec() /100) ) ]