Page 1 of 1

Lentitud de Browse en programas en RED

Posted: Thu Oct 09, 2014 11:42 am
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.

Re: Lentitud de Browse en programas en RED

Posted: Thu Oct 09, 2014 2:30 pm
by jrestojeda
Hola,
Los filtros son tremendamente lentos.
Hay varias alternativas al respecto. (Índice temporal condicionado y Scope por ejemplo)
Saludos,

Re: Lentitud de Browse en programas en RED

Posted: Thu Oct 09, 2014 2:56 pm
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

Re: Lentitud de Browse en programas en RED

Posted: Thu Oct 09, 2014 3:48 pm
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

Re: Lentitud de Browse en programas en RED

Posted: Thu Oct 09, 2014 4:11 pm
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.

Re: Lentitud de Browse en programas en RED

Posted: Thu Oct 09, 2014 4:20 pm
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

Re: Lentitud de Browse en programas en RED

Posted: Fri Oct 10, 2014 12:46 pm
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)