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