Lentitud de Browse en programas en RED

Post Reply
User avatar
txon
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España
Contact:

Lentitud de Browse en programas en RED

Post by txon »

Hola compañeros,

Haciendo pruebas de velocidad de dos PCs en RED, con filtros y Browse(), me sucede lo siguiente.

1) Accedo desde el primer PC, ejecuto un filtro y despues visualizo la informacion con un browse(), perfecto en pocos segundos se muestra.
2) Accedo desde el segundo PC, ejecuto un filtro y despues visualizo la informacion con un browse(), y tambien perfecto en pocos segundos se muestra.
3) Al volver a ejecutar el filtro desde el primer PC, el filtrado tarda algun segundo mas, pero el browse() tarda minutos en aparecer, pero si antes de ejecutar el filtro cierro el archivo DBF y lo vuelvo a abrir, entonces todo funciona mas rapido.

¿Teneis alguna idea de por que sucede?

El codigo es sencillo

Opcion 1: Los DBF solo se abren una vez, funciona lentisimo el paso 3

Code: Select all

    dArc:=AbreDbf("ARCHIVO","Archivo")
    (dArc)->(OrdSetFocus(1))

    DO WHILE .t.

    IF !MsgNoYes("Desea volver a ejecutar el filtro")
       EXIT
    ENDIF

    cIni:=TIME()
    SET FILTER TO VAL((dArc)->Codigo)>=21000000000 .AND. VAL((dArc)->Codigo)<=21200000000
    cFin:=TIME()
    MsgInfo("Inicio: "+cIni+CRLF+"Fin filtro: "+cFin)

        (dArc)->(DBGOTOP())
    IF (dArc)->(EOF())
         MsgInfo("Archivo vacio")
         EXIT
    ENDIF

    Browse()

    ENDDO

    (dArc)->(DBCLOSEAREA())

 
Opcion 2: se abre el DBF cada vez que se ejecuta el filtro y el browse(), va perfecto

Code: Select all

    DO WHILE .t.

    IF !MsgNoYes("Desea volver a ejecutar el filtro")
       EXIT
    ENDIF

    dArc:=AbreDbf("ARCHIVO","Archivo")
    (dArc)->(OrdSetFocus(1))

    cIni:=TIME()
    SET FILTER TO VAL((dArc)->Codigo)>=21000000000 .AND. VAL((dArc)->Codigo)<=21200000000
    cFin:=TIME()
    MsgInfo("Inicio: "+cIni+CRLF+"Fin filtro: "+cFin)

        (dArc)->(DBGOTOP())
    IF (dArc)->(EOF())
         MsgInfo("Archivo vacio")
         EXIT
    ENDIF

    Browse()

    (dArc)->(DBCLOSEAREA())

    ENDDO

 
Gracias de antemano por vuestra ayuda.
Un saludo
Alfonso Larrinaga
info@bsinformatica.net
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Lentitud de Browse en programas en RED

Post by jrestojeda »

Hola,
Los filtros son tremendamente lentos.
Hay varias alternativas al respecto. (Índice temporal condicionado y Scope por ejemplo)
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: Lentitud de Browse en programas en RED

Post by hmpaquito »

Txon,

Hipótesis sobre el aumento de velocidad cuando varias aperturas: quiza tenga que ver con la caché del disco duro.
Los filtros para navegar son lentísimos.

Yo utilizo la estrategia Federer: peticion de datos, carga de una dbf temporal y mostrado (browse) de la dbf temporal. Digo estrategia Federer porque es algo asi como un saque, remate y volea ganadora :)

Saludos
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Lentitud de Browse en programas en RED

Post by acuellar »

Como indica Esteban es por el FILTER

Con índices TEMPORARY/MEMORY o con SCOPE que necesita un índice.

Code: Select all

INDEX ON CODIGO TO TEMP TEMPORARY FOR VAL((dArc)->Codigo)>=21000000000 .AND. VAL((dArc)->Codigo)<=21200000000

ó
INDEX ON CODIGO TO TEMP TEMPORARY
SCOPE(0,"21000000000");SCOPE(0,"21200000000")
 
Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
txon
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España
Contact:

Re: Lentitud de Browse en programas en RED

Post by txon »

Muchas gracias, por vuestra ayuda,
Lo cierto es que el filtrado lo hace muy rapido, he puesto un aviso al principio y al final del filtro y son segundos lo que tarda, el problema es al abrir el browse(), este es el que se dilata minutos, pero solo la segunda vez que se abre, cuando hay otro PC, usando la misma DBF.
De ahi, mi curiosidad.
Si a alguien se le ocurre algo mas, soy todo oidos.
Por otra parte voy a hacer algunas pruebas con los filtros temporales y scopes, que proponeis.

Gracias de nuevo.
Un saludo
Alfonso Larrinaga
info@bsinformatica.net
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Lentitud de Browse en programas en RED

Post by thefull »

Buenas

Olvida set filter. Usa SCOPES o subindices.

Aunque es cierto lo que comentas, nos pasa de tanto en tanto en algunas instalaciones, y no sabemos el motivo.
Tiene algo que ver entre las versiones de Windows, sobretodo con Vista.

Te recomiendo http://xthefull.blogspot.com.es/2014_02_01_archive.html
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
txon
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España
Contact:

Re: Lentitud de Browse en programas en RED

Post by txon »

En primer lugar gracias a todos por vuestra ayuda.
He dejado los FILTER y lo estoy intentando con OrdWildSeek().
He probado algun codigo que he visto del funcionamiento de OrdWildSeek(), pero me da error al ejecutarlo.
Trabajo con Fivewin 2.7 + xHarbour 0.99.6 + ADS (local)

El codigo es simple.

Code: Select all

#include "fivewin.ch"
#include "Ads.ch"

FUNCTION Main()

      LOCAL aCust := {}
      Local cExpr:=""

      USE Archivo
      SET INDEX TO Archivo
      SET ORDER TO 1

      cExpr:="220"
      DO WHILE OrdWildSeek( "*"+cExpr+"?",.t. )
         AADD( aCust, FIELD->Codigo )
      ENDDO

      AEval( aCust, {|c| QOut(c) } )

      GO TOP

      cExpr:="121"
      aCust := {}
      DO WHILE OrdWildSeek( "*"+cExpr+"?",.t. )
         AADD( aCust, FIELD->Codigo )
      ENDDO

      AEval( aCust, {|c| QOut(c) } )

      USE

RETURN nil

INIT PROCEDURE Inicio

  Local nFiles

  SET CENTURY ON
  SET EPOCH TO 1950
  SET DATE BRITISH
  SET SAFETY OFF
  SET EXACT OFF
  SET DELETE ON
  SET AUTORDER TO 1

//  REQUEST _ADS          // Controlador de DBFs por defecto
  RddRegister("ADS",1)   //
  RDDSetDefault("ADS")   //
  AdsSetSerVerType(7)    // Local, Remoto, AIS (Internet), Todos = 7
  AdsSetFileType(2)      // Indices CDX
  Request OrdKeyNo,OrdKeyCount,AdsKeyCount,AdsKeyNo
  Request HB_LANG_ES     // Idioma español pagina de codigo 850
  HB_LANGSELECT( "ES" )  // Mensajes en español, dia semana, mes, ...

  nFiles=SetHandleCount(255)

RETURN

 
El error que aparece es:

Error occurred at: 10/10/2014, 14:27:08
Error description: Error DBCMD/1015 Error de argumento: ORDERINFO

Stack Calls
===========
Called from: => ORDWILDSEEK(0)
Un saludo
Alfonso Larrinaga
info@bsinformatica.net
Post Reply