CRIAR INDICES SE TORNOU LENTO COM XHARBOUR ..

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

Moderador: Moderadores

Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

CRIAR INDICES SE TORNOU LENTO COM XHARBOUR ..

Mensagem por deividdjs »

Ola amigos !

estou com o seguinte problema .. converti meu sistema de clipper+VL2 para xHarbor+VL22+GTWVT .. até ai tudo bem .. ele está funcionando bem .. só q nao hora de criar os indices é um "PARTO" ele está muito lento .., só q existe um detalhe .. se eu minimizo o tela .. ele cria muito rapido .. se eu fico com a tela maximizada acompanhando a criação do mesmo fica lento .. eu uso progressão na criação do indexe, só q ja testei tirando-o tbm, mais mesmo assim ficou lento .. alguem já passou por isso ??

eu estou usando assim ..

Código: Selecionar todos

*---------------*
 function INDEX // barra de progressão 
*---------------*
local TELA_IND := savenv(19,14,14,79)
local a_DBF, IND_

a_DBF := dbf() + ".DBF        "

set color to "B/W*"
IND_ := ((recno()*100)/reccount())
@17,62 say transform(IND_,"999") + "%" color "B/W"
@19,14 say "²" + replicate("²",(recno())/reccount()*50) color "b+/w"
set color to "N/W"
@15,13 say "Base de Dados:"
@15,28 say a_DBF color "r/w"
@15,50 say "Indice:"
@15,58 say transform(ind,"99") color "r/w"
@15,61 say "de"
@15,64 say transform(tags,"99") color "r/w"
@16,13 say replicate("Ä",53)
@17,13 say "Indexados:"
@17,23 say str(recno()) color "r/w"
@17,34 say "de"
@17,37 say alltrim(str(reccount())) color "r/w"
set color to "R+/W*"

if IND_ >= 99.99
   rstenv(TELA_IND)
   @19,14 say replicate(" ",50) color "w/w"
endif

return (.t.)


***********************************
if .not. file("BAN"+INDEXEXT())
   @10,44 say "BAN.CDX    "
   inkey(0.1)

   if Abre_Index("BAN.DBF",.t.,"BAN","BAN.CDX") = .f.
      close databases
      return
   endif

   private ind:=0, tags:=2

   ind++
   index on CC_CODBAN tag BANCX_01 eval(INDEX())
   ind++
   index on CC_NOME tag BANCX_02 eval(INDEX())

   close database

endif
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Luiz
Usuário Nível 2
Usuário Nível 2
Mensagens: 61
Registrado em: 05 Set 2006 07:30
Localização: Vila Velha - ES

Mensagem por Luiz »

Ja aconteceu aqui, é que a GT fica remontando toda a area da tela durante o processo.

Eu resolvi isso usando a gtwvw e criando uma janela pequena onde eu coloco a barra de progresso, mas não sei como proceder na gtwvt.

Resolveu a lentidão não só no indice mas em relatórios tambem.
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Mensagem por deividdjs »

Só q tem um detalhe Luiz .. eu uso VISUAL LIB tbm .. nao sei se a GTWVW fica legal com a VISUAL ..
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Tire o seu EVAL do comando que cria os indices, ele que tá fazendo ficar lento, ou coloque a clausula EVERY para ele ser avaliado de tempo em tempo, o problema ai é que toda vez que chama a rotina INDEX na hora de cirar o indice ele tá redesenhando a tela e por isso a lentidão e nisto quando vc minimiza a tela fica mais rapido, faça o que falei acima que o problema estará resolvido.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
momente
Usuário Nível 3
Usuário Nível 3
Mensagens: 496
Registrado em: 03 Mar 2005 11:53
Localização: São Carlos-SP
Contato:

Mensagem por momente »

Amigo deividdjs,

Quando vc usa so o comando abaixo, fica lento também?

index on CC_CODBAN tag BANCX_01

Valeu!
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
ReinaldoFreitas
Usuário Nível 2
Usuário Nível 2
Mensagens: 97
Registrado em: 02 Jul 2005 15:39

Mensagem por ReinaldoFreitas »

ola, tbm tenho esse problema, como usar o EVERY ??
Iniciante em Xharbour / Hwgui
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

INDEX ON campo TO arquivo WHILE condição1 FOR condição2 EVAL funcao() EVERY inteiro

onde:

condição1 : o indice sera criado enqto os registros atenderem a condição
condição2 : só entrarão no indice registros que atendam
função(): função executada a cada registro (e menos q especifique every)
EVERY inteiro: determina a cada quantos registros será axecutada a função de EVAL, conforme for 50 ou até 100 seria um numero razoável

Boa sorte...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Mensagem por deividdjs »

eu testei com o comando every tbm e nao tive exito .. tive q tirar a barra de progressao ae ficou uma maquina pra criar indices ..
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem por vagucs »

Como vc geralmente vai ter uma barra de progração, vc nao precisa mostrar valores fora dos 100% ou seja de 1 a 100%, então supondo que numa base de 500.000 registro cada 1% representaria 5.000 registros, assim vc teria que usa ro EVERY 5000 ou seja, executar o EVAL a cada 5 mil registros, como nunca vai saber quantos registro tem na base teria que fazer algo assim

Código: Selecionar todos

INDEX ON CAMPO TO ARQUIVO.NTX EVAL {||PROGRESS()} EVERY LASTREC()/100
Assim, ele sempre pega o lastrec e faz durante a indexação somente 100 chamadas a rotina EVAL, justamente quando o percentual muda, considerando o percentual de 1 a 1 porcento, fica perfeito, só colocar e testar.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Mensagem por deividdjs »

NAO FUNCIONOU .. ELE VAI RAPIDO ... SÓ Q NAO MOSTRA A BARRA DE PROGRESSAO ...

Código: Selecionar todos

DESKTOP()

RddSetDefault("DBFCDX")
DbSetDrive("DBFCDX")

private l, r, i:=0

Clear
dbcloseall()
use RECEBER exclusive new

r:=reccount()*3
//            |
//            +----> quantidade de TAGs
l:=0
i++
index on cc_codigo  TAG iCodigo  EVAL{||CDXPROGRESS()} EVERY LASTREC()/100    
i++                              
index on cc_nome    TAG inome    EVAL{||CDXPROGRESS()} EVERY LASTREC()/100
i++                             
index on cc_codcli  TAG icodcli  EVAL{||CDXPROGRESS()} EVERY LASTREC()/100

dbcloseall()

return nil
//////////////////////
function cdxprogress()
//////////////////////
l++
if l=1
        dispbox(10,14,14,65,,'w/b')
        @ 09,14 say padc('Evolu‡Æo da indexa‡Æo',52)   color 'w+/b'
        @ 11,15 say Replicate(" ", 50) color 'w+/b'
endi
cx:=int(l*100/r/2)
@ 11,15 say Replicate("Û", cx) color 'gr+/b'
ii := str(cx*2,3)+'%'
@ 12,15 say padc(ii,50,'Ä') color 'w/b'
@ 13,15 say padc( 'Processando index '+alltrim( str( i ) ), 50 ) color 'w+/b'

return .t.
Obrigado ..
Deivid
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

Você nem precisa colocar a função dentro do bloco {|| }, já que é só uma instrução mesmo ...

Sua função lá embaixo também ta um pouco confusa...

Tirando os detalhes de tela, eu costumo fazer assim:

Código: Selecionar todos

use vendas exclusive new
index on codven tag codven to vendas eval Progresso_Idexacao() every 100

Function Progresso_Idexacao()
   @ 21, 15 say Replicate( Chr(219), RecNo() / LastRec() * 50 )
   Return ( .t. )
Multiplico por 50 alí por que quando da 100% ocupa 50 colunas, da 15 até até a 65... (uma centralização na base da gambi)
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
heveraldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 72
Registrado em: 16 Jun 2006 17:15

Indexaçao lenta

Mensagem por heveraldo »

Usava barra de progressao na indexao, e cheguei a seguinte conclusao:

Ficava uma barra de progressao indo de 0 a 100 para todo indice que criava, alem de nao informa nada, so deixava a indexacao lenta.

Solução:

Criei um contador manual e a cada indice organizado e incrementava + 1
até 100%

e quando chegava a 100 a indexacao de todos os indice estava concluida,
deixando uma informação real ao usuario, apesar que, qm alguns momento evoluir muito rapido.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Olá,

Para mostrar a indexação de todos os arquivos em uma barra só você precisaria abrir todos os DBFs, somar todos os registros.

Algo assim:

Código: Selecionar todos

Use Arq1 new
SomaDeTodos := LastRec()

Use Arq2 new
SomaDeTodos := SomaDeTodos + LastRec()

Use Arq3 new
SomaDeTodos := SomaDeTodos + LastRec()



***********
//E depois lá na função do EVAL:

RegAtual := RegAtual + 1

@ 21, 15 say Replicate( Chr(219), RegAtual/ SomaDeTodos * 50 )

Eu pelo menos faço assim...

Valeu!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Mensagem por deividdjs »

eu desisti da barra de progressão fica muito lenta com o Xhb + Visual lib .. nao sei pq !!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado Deivid.

Você poderia me mandar uns ScreenShots do seu sistema, é que estou querendo migrar o meu CLIPPER+VL para xHarbou+Vl.

Obrigado

mmendeso@gmail.com mmendeso@ig.com.br

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Responder