Página 1 de 2

xHarbour pesquisa lenta com o Seek

Enviado: 29 Set 2014 17:05
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.

xHarbour pesquisa lenta com o Seek

Enviado: 30 Set 2014 11:10
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

xHarbour pesquisa lenta com o Seek

Enviado: 30 Set 2014 11:37
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
:))

xHarbour pesquisa lenta com o Seek

Enviado: 30 Set 2014 14:00
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.

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 13:20
por Kapiaba
Olá, a LIB DBFCDX fica em: C:\xHarbour\Lib

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

abs.

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 13:45
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.

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 14:19
por Kapiaba
Você usa o que para compilar?

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 14:41
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 =

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 14:56
por Kapiaba

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 16:34
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.

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 17:02
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.

xHarbour pesquisa lenta com o Seek

Enviado: 01 Out 2014 17:32
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.

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 14:51
por Kapiaba
Então, na realidade, quem está lento é dbedit?

Pode mostrar o Codigo?

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 15:39
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 ?

xHarbour pesquisa lenta com o Seek

Enviado: 02 Out 2014 15:49
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