Xharbour com .CDX ficou + lento q com .NTX

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Xharbour com .CDX ficou + lento q com .NTX

Mensagem por lugab »

Bom dia, amigos.

É verdade. Eu uso o xharbour 1.0 simplex que veio com um DBFCDX.LIB de 08/11/2007 e possui 65.024mb de tamanho.

Inicalmente eu só recompilei meu fontes clipper em xharbour, mantendo o .NTX testei por um bom tempo, e agora finalmente converti os bancos de dados para DBF+CDX e o sistema ficou visivelmente mais lento, principalmente em leituras sequencias para relatórios exibidos em tela.

Fiz tudo certo. Antes eu converti os .DBF+DBT para .DBF+FPT, usando o próprio
xharbour.

Alguém passou por algo semelhante e tem alguma orientação a dar ?

Grato,

Gabriel
lugab
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Xharbour com .CDX ficou + lento q com .NTX

Mensagem por gvc »

Mostre como vc cria os arquivos de indices.
Mostre uma parte do fonte que vc verificou que ficou mais lento para poder-mos testar.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Xharbour com .CDX ficou + lento q com .NTX

Mensagem por lugab »

Ok, Gvc. Ai vai... Mas estão corretíssimas.

Acredito que o problema é a minha lib DBFCDX com o Harbour 1.00 simplex.

No prog principal eu uso:

REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")



* Um Recorte da Rotina de Indexação "

DO WHILE .T.
W_ARQ=ARQESTP
USE (W_ARQ) EXCL
IF NETERR()
ALERT(W_ARQ+" inacessivel. Certifique-se q ninguem esta usando o Sistema",,,10)
LOOP
ENDIF
EXIT
ENDDO

DELE ALL FOR EMPTY(REF)
PACK
INDE ON REF+DTOS(BATIM) TAG (ARQESTP0) TO (W_ARQ)
INDE ON STR(NUMLIN,3)+DESREF+REF TAG (ARQESTP1) TO (W_ARQ)
INDE ON STR(NUMGRU,4)+DESREF+REF TAG (ARQESTP2) TO (W_ARQ)
INDE ON REFORI TAG (ARQESTP3) TO (W_ARQ)
INDE ON DESREF+REF TAG (ARQESTP4) TO (W_ARQ)

* A Rotina de leitura e exibição se resume a ler/imprimir"
l=12

Do while .not. eof() .and. ref=tref
if l>55
cabec()
endif
@ l,0 say
@ l,14 say .....
@ l, 31 say ....
l=l+1
skip
enddo
lugab
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Xharbour com .CDX ficou + lento q com .NTX

Mensagem por sygecom »

Olá Gabriel,
Você tem que excluir o INDICE antes de recriar o mesmo.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Xharbour com .CDX ficou + lento q com .NTX

Mensagem por gvc »

O post do colega sygecom esta correta. Sempre que for criar os arquivos CDX, apague-os primeiro.

Sobre o seu código:

Código: Selecionar todos

request dbfcdx
rddsetdefault("dbfcdx")

* Um Recorte da Rotina de Indexação "

w_arq := arqestp
use (w_arq) excl
if neterr()
   alert(w_arq + " inacessivel. Certifique-se q ninguem esta usando o Sistema",,,10)
   return
end

delete all for empty(ref)
pack

if !filedelete(warq)
   alert('Impossivel excluir o arquivo ' + warq)
   return
end

// Vc cria as tag´s (arqestpX) com parenteses. Não precisa.
index on ref + dtos(batim) tag 1 to (w_arq)
index on str(numlin, 3) + desref + ref tag 2 to (w_arq)
index on str(numgru, 4) + desref + ref tag 3 to (w_arq)
index on refori tag 4 to (w_arq)
index on desref + ref tag 5 to (w_arq)

* A Rotina de leitura e exibição se resume a ler/imprimir"
l := 12

while !eof() .and. ref = tref
   if l > 55
      cabec()
   end
   @ l,0 say
   @ l,14 say .....
   @ l++, 31 say ....
   dbskip()
end
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Xharbour com .CDX ficou + lento q com .NTX

Mensagem por lugab »

Sim, Sygecom e CVC. Eu já faço isso.

Na iníciorotina principal de indexação eu executo:

RUN DEL *.CDX /S/Q > NULL



Acredito piamente que tem algo de incompatível entre o meu XHARBOUR 1.0 + BORLAND + LIB CD.
lugab
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Xharbour com .CDX ficou + lento q com .NTX

Mensagem por gvc »

Eu tenho um sistema pequeno usando CDX e funciona.
Como é pequeno, não dá para contar muito.

Os grandes ainda estão em NTX. (Não deixam eu mudar p/ CDX)
Mas eu vou testar.
Acho que se isso fosse geral já teriam postado muito.
Vamos testar e ver o que acontece.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Xharbour com .CDX ficou + lento q com .NTX

Mensagem por gvc »

Eu teste com um de 411Mb e a diferença de indexar e correr o arquivo todo não foi tão visivel.
Eu uso a 1.1.0 rev 6095.
Criei os indices cdx, listei, criei os indices ntx, listei. As marcas de tempo variam de acordo com o que estou fazendo na máquina.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder