Lentitud de Browse en programas en RED

Lentitud de Browse en programas en RED

Postby txon » Thu Oct 09, 2014 11:42 am

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  Expand view

    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  Expand view

    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
txon
 
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España

Re: Lentitud de Browse en programas en RED

Postby jrestojeda » Thu Oct 09, 2014 2:30 pm

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
User avatar
jrestojeda
 
Posts: 583
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Lentitud de Browse en programas en RED

Postby hmpaquito » Thu Oct 09, 2014 2:56 pm

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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Lentitud de Browse en programas en RED

Postby acuellar » Thu Oct 09, 2014 3:48 pm

Como indica Esteban es por el FILTER

Con índices TEMPORARY/MEMORY o con SCOPE que necesita un índice.
Code: Select all  Expand view

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
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Lentitud de Browse en programas en RED

Postby txon » Thu Oct 09, 2014 4:11 pm

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
txon
 
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España

Re: Lentitud de Browse en programas en RED

Postby thefull » Thu Oct 09, 2014 4:20 pm

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
thefull
 
Posts: 729
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Lentitud de Browse en programas en RED

Postby txon » Fri Oct 10, 2014 12:46 pm

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  Expand view

#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
User avatar
txon
 
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 65 guests