Página 1 de 2
Tbrowse lento em REDE
Enviado: 23 Ago 2007 14:18
por ederxc
Boa tarde !
Pessoal estou encontrando um pequeno problema com o tebrowse() em rede
quando abro a pesquisa com tbrowse() de um mesmo DB na rede a maquina com menos capacidade de hardware fica muito lenta , lenta mesmo ! ´o)
são duas maquina, servidor e estação
o prg esta compilado com rtlink , timeslic.obj
estou usando indice *.NTX
.............................................
Descrição da maquina estação
pentium lll 450mHz 256 ram
.............................................
Descrição servidor
Durom 1.8 Mhz 512ram
.............................................
Seria possivel o problema esta na maquina 02 ? Estranho pois quando vejo o desempnho do Proc. ele nem chega a 10% de consulmo...
Enviado: 23 Ago 2007 14:41
por Maligno
Não seria a capacidade mais limitada do Pentium III? Dá pra testar em outra máquina mais parruda no lugar dessa máquina?
Enviado: 23 Ago 2007 15:07
por ederxc
Maligno escreveu:Não seria a capacidade mais limitada do Pentium III?
Mas se o uso do proc não chega nem a 10%como poderia ser , isso que não consigo entender
Dá pra testar em outra máquina mais parruda no lugar dessa máquina?
xii não tenho ,mas se não tiver jeito terei que testar de alguma forma em outra rede té++
Enviado: 23 Ago 2007 23:02
por sygecom
Se ainda não resolveu, posta aqui como esta usando o Tbrowse() ...
Abraços
Leonardo Machado
Enviado: 24 Ago 2007 01:09
por Maligno
Poderia ser também algo relacionado a rede. Que tipo de rede você está usando? São apenas duas máquinas?
Enviado: 24 Ago 2007 07:22
por ederxc
Maligno escreveu:Poderia ser também algo relacionado a rede. Que tipo de rede você está usando? São apenas duas máquinas?
Maligno a rede é crossover (ponta-a-ponta)
Leo , ainda não resolvi o problema
Enviado: 24 Ago 2007 07:34
por Maligno
a rede é crossover (ponta-a-ponta)
Não deveria ser lento por causa disso. A não ser que haja algum problema numa das placas. Tentou trocar?
Enviado: 24 Ago 2007 08:01
por ederxc
Pois bem , achei a causa do problema , era um refreshall() a cada loop
Mas agora o problema ficou ainda maior , pois este refreshall() é nessesario a cada
"n" segundos para manter o browse atualizado , caso haja alguma deleção de arquivo e eu não sei como empregalo a cada "n" segundos sem que ele fique dentro de um
do while
Código: Selecionar todos
static FUNC cPesqfor(vcod) //Nome
Sele C
set order to 2
priv cpesq:="" //variavel de pesquisa
priv tabela:=""
tabela=savescreen(00,00,24,80,tabela )
set color to ("n/gb")
@04,00 clear to 16,50
Dispbox(04,00,16,50)
@05,01 say ("Pesquisa:")
@05,10 say repli("_",30) color("n/gb")
@06,01 say repli("Ä",49)
#include "inkey.ch"
brw:=TBrowseDb(07,01,15,49)
brw:HeadSep:=Chr(196) + Chr(196) + CHr(196)
brw:ColSep :=Space(01) + Chr(179) + Space(01)
brw:ColorSpec:="n/gb,gr+/b"
colum1:=tbcolumnnew('Codigo' ,{||C->cod })
colum2:=tbcolumnnew('Setor' ,{||C->(left(forn,35))})
brw:addcolumn(colum1)
brw:addcolumn(colum2)
mensagem("Digite o SETOR ou use setas para pesquisa")
brw:right()
brw:gotop()
set cursor off
do while .t.
brw:refreshall()
do while(! brw:stabilize())
enddo
brw:forcestable()
if brw:stable
if brw:hitTop()
@16,35 say" Inicio " color('b-/gB')
Elseif brw:hitBottom()
@16,35 say" Fim " color('b-/gB')
else
@16,35 say"ÄÄÄÄÄÄÄÄÄÄ"
endif
endif
if empty(cpesq)
@05,10 say repli("_",30) color ("n/gb")
endif
nkey:=inkey(5)
if nkey == K_UP
brw:up()
cpesq=""
elseif nkey == K_DOWN
brw:down()
cpesq=""
elseif nkey == K_LEFT
brw:left()
cpesq=""
elseif nkey == K_RIGHT
brw:right()
cpesq=""
elseif nkey == K_HOME
brw:home()
cpesq=""
elseif nkey == K_END
brw:end()
cpesq=""
elseif nkey == K_PGUP
brw:pageUp()
cpesq=""
elseif nkey == K_PGDN
brw:pageDown()
cpesq=""
elseif nkey == K_CTRL_PGUP
brwr:goTop()
cpesq=""
elseif nkey == K_CTRL_PGDN
brw:goBottom()
cpesq=""
elseif nkey == K_CTRL_HOME
brw:panHome()
cpesq=""
elseif nkey == K_CTRL_END
brw:panEnd()
cpesq=""
elseif nkey == K_CTRL_LEFT
brw:panLeft()
cpesq=""
elseif nkey == K_CTRL_RIGHT
brw:panRight()
cpesq=""
elseif nKey== K_ENTER
vcod=C->cod
keyb strzero(vcod)
exit
elseif nkey==K_ESC
exit
elseif(nkey>=32 .and. nkey<=255) .and.len(cpesq)<30
cpesq:=upper((cpesq)+chr(nkey))
@05,10 say cpesq color("n/gb")
set softseek on
brw:gotop()
seek acento(cpesq)
if ! found()
cpesq:=upper(left(cpesq,len(cpesq)-1))
seek acento(cpesq)
@05,10 say cpesq +"_" color("n/gb")
endif
set softseek off
elseif nkey==8 .and. len(cpesq)>0 //bakspace
cpesq:=upper(left(cpesq,len(cpesq)-1))
@05,10 say cpesq +"_" color("n/gb")
set softseek on
brw:gotop()
seek acento(cpesq)
if ! found()
cpesq:=upper(left(cpesq,len(cpesq)-1))
seek acento(cpesq)
@05,10 say cpesq +" " color("n/gb")
set softseek off
endif
endif
ENDDO
set cursor on
restscreen(00,00,24,80,tabela )
RETURN
:'(
Enviado: 24 Ago 2007 08:18
por Maligno
Ele pode e deve ficar dentro do WHILE. Você só precisaria acrescentar uma variável que armazenará uma contagem de segundos. Esgotado o tempo ou pressionada uma tecla qualquer, o contador é reciclado, o refresh é executado e o processamento continua até voltar ao topo da malha.
Enviado: 24 Ago 2007 09:36
por sygecom
Eder, é simples...é só dah um refreshall() logo depois que o usuario deletou algo !!! se ele não deleta...não vai ficar dando refreshall() em vão !!
Abraços
Leonardo Machado
Enviado: 24 Ago 2007 09:52
por ederxc
sygecom escreveu:Eder, é simples...é só dah um refreshall() logo depois que o usuario deletou algo !!! se ele não deleta...não vai ficar dando refreshall() em vão !!
Abraços
Leonardo Machado
Seria dessa forma se eu usa-se o tbrowse() para alterar , incluir , deletar , mas eu o uso somente para pesquisa , eu chamo o tbrowse() pesquiso e retorno os dados para as variaveis , só ae que decido se vou alterar ou excluir , ou seja ja estou fora do tbrowse() não tem como dar um refreshall(0 na deleção ou seja , tem que ser exatamente como o maligno citou , deichar que o próprio tbrowse tenha uma variavel que faça uma contagem a cada "n" segundos para fazer refreshall() independente de meu loop , pois se a cada loop fizer um refreshall() vai dar na mesma ...
:f
Enviado: 24 Ago 2007 11:10
por Maligno
O refresh serve para atualizar o browser após a ocorrência de um evento de apagamento, alteração ou inclusão. Mas se esse evento ocorre em outra máquina, não adianta nada. Obrigatoriamente tem de ser feito o refresh em função do tempo e TAMBÉM quando o evento ocorre na própria máquina.
Enviado: 24 Ago 2007 11:24
por Eolo
Maligno, não entendi... Se vc está no PC1, com um DBF aberto digamos nos primeiros 20 registros, e alguém no PC2 deleta o registro 10 do mesmo DBF, como o PC1 vai saber da deleção se não reconstruir a tela (refresh)?
Enviado: 24 Ago 2007 11:32
por Maligno
Não, Eolo. Quando eu disse "não adianta nada", estava me referindo à idéia do Leonardo de dar um refresh apenas quando se apaga um registro. Isso é que não adianta, porque, justamente como eu disse, se o evento é externo, não há meio de saber. Por isso o refresh deve obrigatoriamente ocorrer em função do tempo.
Enviado: 24 Ago 2007 11:40
por Eolo
Ah, sim...