xHarbour pesquisa lenta com o Seek

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

olá pessoal, comecei a fazer os primeiros testes la no meu cliente com o xHarbour, copiei o executável para o Servidor, recriei os indices e foi bem rápido a criação dos NSX, mas nas estações, as pesquisas com Seek está muito lenta, tem hora que o vendedor acha que o sistema travou de tão lenta que está a procura com Seek, no Dbedit, la na estação, se correr registro por registro mantendo a seta pressionada, percebe-se também que o processamento é lento.
Voltei para o executável Clipper, pois da forma como está, está muito lento, no Clipper a pesquisa está boa, a forma de fazer pesquisa no xHarbour tem alguma diferença do Clipper, tanto na criaçao dos indices como no Seek ?
Lá no cliente ainda é o XP, quero fazer os testes para depois mudar para windows 7 64 bits.

crio os indices assim:
INDEX ON CODIGO PARA icodigo
SEEK icodigo

obrigado.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

Vocês acham que com CDX a pesquisa ficará melhor em rede, estou usando NSX
tenho que mudar muitos comandos ?
Eu crio vários indices para cada tabela:
use produtos
index on codigo to indcodigo
index on descricao to inddescri

aqui no forum achei da forma descrita abaixo, isso faz diferença na performance em rede ?


Para indexar com .CDX:

USE arquivo
INDEX ON chave1 TAG arquivo1 TO arquivo
INDEX ON chave2 TAG arquivo2 TO arquivo
...
INDEX ON chave15 TAG arquivo15 TO arquivo

USE arquivo INDEX arquivo
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem por Kapiaba »

Principais características:

. Os índices .CDX são bem menores do que os .NTX criados pelo Clipper;

. Cria índices condicionais através das cláusulas FOR, WHILE, REST e NEXT;

. Cria arquivos de índices compostos que contém até 99 subíndices ou TAGS em um único arquivo reduzindo, assim, o número de arquivos abertos em nível do DOS;

. Como o Clipper permite apenas 15 arquivos associados e abertos com a área atual, o uso dos arquivos CDX permite a abertura de mais arquivos de índices sem sobrecarregar o número de arquivos que o DOS manipula.

Para que o RDD DBFCDX funcione corretamente, devem ser seguidos os seguintes passos:

1. Acrescente as linhas abaixo no início do seu programa principal:

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto

RDDSETDEFAULT("DBFCDX")

2. Para criar os arquivos de índices, você deve usar o seguinte comando:

SELECT 1
USE CLIENTES
INDEX ON codigo TAG indice1 TO cliente1
INDEX ON nome TAG indice2 TO cliente1

Observe que cada campo chave tem um TAG diferente (indice1 e indice2), mas todos estão sendo direcionados para um mesmo arquivo (cliente1), com isto será criado um arquivo de índice chamado CLIENTE1.CDX, com dois subíndices, um indexado pelo código do cliente e outro pelo nome do cliente.

3. Para mudar a ordem em um arquivo de índice CDX, você deve proceder da seguinte forma:

ORDSETFOCUS("INDICE2")

Com este comando você vai selecionar o subíndice "INDICE2", que está indexado pelo campo nome do cliente.

ORDSETFOCUS("INDICE1")

Retorna ao subíndice principal, que está indexado pelo campo código do cliente.

Se o comando ORDSETFOCUS( ) não for especificado, a ordem será sempre a do primeiro subíndice criado, neste caso será o indice1, pelo código.

4. Para linkar um programa com o RDD DBFCDX, deve ser acrescentada a LIB DBFCDX durante o processo de linkagem:

5. Os comandos abaixos continuam sendo usados da mesma forma:

. SET INDEX TO - Abre um arquivo de índice;
. CLOSE ALL - Fecha todos os arquivos de dados e índices associados.


Analizemos Abaixo:

Código: Selecionar todos

INDEX ON   ;
    TAG TO ;
    FOR    ;
    WHILE  ;
    NEXT | RECORD | REST | ALL ;
    UNIQUE ;
    ASCENDING | DESCENDING ;
    EVAL EVERY ;
    USECURRENT ;
    ADDITIVE ;
    CUSTOM ;
    NOOPTIMIZE
abs
:))
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

olá Kapiaba, obrigado por sua atenção

Código: Selecionar todos

Para linkar um programa com o RDD DBFCDX, deve ser acrescentada a LIB DBFCDX durante o processo de linkagem:

No programa principal estou fazendo assim, conforme sua sugestão:

ANNOUNCE RDDSYS
REQUEST DBFCDX,DBFFPT
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
RDDSETDEFAULT("DBFCDX")

estou linkando assim:
C:\xHarbour\BIN\XBuild LOJA.EXE.XBP
UPX LOJA.EXE

onde eu tenho que acrescentar a LIB DBFCDX, durante o processo de linkagem, estou com essa dúvida.

obrigado.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem por Kapiaba »

Olá, a LIB DBFCDX fica em: C:\xHarbour\Lib

Você deve incorporar junto com as demais Lib do seu sistema.

abs.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

Olá, é isso que eu não estou sabendo como se faz, quando era no clipper eu incorporava a lib no LOJA.LNK, mas no xHourbour eu não sei coloco essa lib se é no programa principal ou no linkador, entendeu.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem por Kapiaba »

Você usa o que para compilar?
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

O arquivo abaixo é o LOJA.EXE.XBP, e compilo assim: C:\xHarbour\BIN\XBuild LOJA.EXE.XBP, descobri tambem que o SEEK acha rapidamente, o que esta demorando é para posicionar o cursor no registro encontrado no Dbedit, demora para montar o Dbedit quando encontra um registro.

CINI =
C_OUTPUTFOLDER =
DEFFILE =
INCLUDEFOLDERS =
LAUTORUN =
LDEBUG = .F.
LGUI = .F.
LIBFOLDERS =
LMT = .F.
LNOAUTOFWH = .F.
LPRG_CLASSICDEBUG = .F.
LPRG_DEBUG = .F.
LUSEDLL = .F.
MAPFILE =
MYC_FLAGS =
MYDEFINES =
MYLINK_FLAGS = -Gn -s
MYPRG_FLAGS =
MYRC_FLAGS =
MYSLY_FLAGS =
OUTPUTFOLDER =
PRG_OUTPUTFOLDER =
RC_OUTPUTFOLDER =
RUNARGUMENTS =
SLY_OUTPUTFOLDER =
STARTIN =
TARGETFOLDER =

[LOJA.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[FUNCOES.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[REINDEXA.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[CADUSU.PRG]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

ola Kapiaba, estou compilando e gerando executavel normalmente, estou tendo dois problemas, instalei o sistema la no meu cliente, com um servidor e mais cinco estações com windows xp:

Demora para carregar o executavel (45 segundos) quando entro no sistema pela estação pela primeira vez, a partir da segunda carrega rapidamente

Percebi tambem que o Seek localiza rapidamente um registro, mas demora muito para o cursor posicionar no registro encontrado e remontar o Dbedit.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem por Kapiaba »

um servidor e mais cinco estações com windows xp

O servidor, qual é o rWindows?

E para se dar um SEEK(), é necessário SETAR o indice correto.

supondo que fosse por codigo:

SET ORDER TO 01 // TAG do .CDX para se dar um SEEK() por código do cliente, por exemplo.

Se fosse por NOME do Cliente:

SET ORDER TO 02 // Segunda TAG do .CDX para se dar um SEEK() por nome (alfa).

Problema de lentidão, pode ter várias causas, inclusive, virus.

abs.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

são todos windows xp, inclusive o servidor, está localizando o registro desejado, só está demorando para fazer a atualização da tela do dbedit, ele posiciona no registro desejado, mas demora.
La no cliente estou testando o xHarbour, mas como está lento voltei ele para o Clipper e no Clipper, funciona rapidinho, seria o caso de usar o Tbrowse ?

obrigado.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem por Kapiaba »

Então, na realidade, quem está lento é dbedit?

Pode mostrar o Codigo?
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

xHarbour pesquisa lenta com o Seek

Mensagem por porter »

olá, eu acho que é o Dbedit, pesquisando eu já vi relatos que o Dbedit no xHarbour fica lento, pelo debugador na hora do Seek não tem problemas, mas quando chega no Return(1) que é para parar no registro localizado ai demora.
Eu posso mostrar o código sim, mas ele é muito grande, se mostrar somente uma parte do Dbedit, ficaria mais facil para você dar uma olhada ?
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

xHarbour pesquisa lenta com o Seek

Mensagem por Kapiaba »

Voce faz assim no xHarbour?

Código: Selecionar todos

/*
* New enhanced DBEdit() test
*
* See how aCols[1] is an array of 2 items
* The first is, as usual, the column data
* The second is the codeblock that returns a pair of {std,enh} colors
* just like in tbrowse :-)
*
* NOTE: - Color codeblock takes a parameter (actual data)
*         Iïve ignored (used SALARY instead) it here to demostrate how flexible a TBRowse is.
*       - Try moving columns with K_CTRL_UP & K_CTRL_DOWN
*
* Is DBEdit() deprecated? NO!
* Enjoy
* Mauricio <maurifull@datafull.com>
* Comments, suggestions, bugs report welcome
*
*/
#include "inkey.ch"
#include "dbedit.ch"

Function Main()
   Local aCols := {{"PadR(AllTrim(FIRST)+' '+AllTrim(LAST),30)", {|x| IIf(FIELD->SALARY<10000, {3,2}, IIf(FIELD->SALARY<100000,{1,2},{4,5}))}},;
                "CITY",;
                "SALARY"}

  set scoreboard off

  Use test
  @maxrow(),0 say "<Ctrl-Down/Up>-Toggle columns  <Space bar>-Edit cell" 
  DBEdit(0,0,MaxRow()-1,MaxCol(), aCols, "TstFnc",,{"Name", "City", "Salary"})
  Close
  Cls
  ? "Have a nice day ;)"
  ?
Return Nil

Function TstFnc(nMode, nCol, oTBR)
LOCAL GetList := {}
Local nRet := DE_CONT

  Do Case
    Case nMode == DE_INIT // EXTENSION: Initialization mode
      oTBR:colorSpec := "n/bg,w/n,r/bg,w+/bg,w+/gr"
    Case nMode == DE_HITTOP
      Keyboard Chr(K_CTRL_PGDN)
    Case nMode == DE_HITBOTTOM
      Keyboard Chr(K_CTRL_PGUP)
    Case LastKey() == K_ESC
      nRet := DE_ABORT
    Case LastKey() == K_SPACE .And. oTBR:getColumn(nCol):heading != "Name"
      SetCursor(1)
      @ Row(), Col() Get &(oTBR:getColumn(nCol):heading)
      Read
      SetCursor(0)
      Clear TypeAhead
  End

Return nRet
Responder