FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Posted: Wed Oct 10, 2018 12:59 PM

Amigos

Muy buen dia.

Tengo un problema muy grande.
Estoy Corriendo un Programa Pequeño compilado en 32 bits, el cual corre muy bien en windows XP 32 Bits, he tenido que cambiar el computador por un Notebook I 7 Intel de 3.0 GHz y 8 GB de Ram CPU 64 Bits con Windows 10.
Al copiar la carpeta con las DBF y el Programa, sin realizarle ningun cambio, su lentitud es tremenda y esto me tiene muy complicado.

He tomado el tiempo que se demora a generar 2 Archivos:

  1. General.dbf (2 Campos) (Ordenado Por Fecha)
    Tiene 4.565 Facturas.
    Rescato las Facturas de un dia cualquiera.

  2. Detalle.dbf Total Registros (Ordenado por Nro)
    Tiene 24.514

Hice un proceso para generar 2 Dbf de pasos con las facturas de un dia.
Por lo que los archivos de paso tendrian lo siguiente.
1. PasoGral.Dbf (10 Facuras de un dia)

  1. PasoDeta.Dbf (100 Registros en Total.

Este Proceso Toma 1 Min. en el Notebook, lo que antes eran 3 Seg. en Windows XP.

Aque se debe??

Dejo el Codigo que toma Este Tiempo.

 Sele GENEFAC
 Seek dtos(cFecha_exa)

 Do While (Fec_rec=dtoc(cFecha_exa).and.!eof())
        Sele b     // PasoGral
        do while .t.
             Dbappend()
             If !neterr()
                 repl Nro_bon with a->Nro_bon,Nom_pac with a->Nom_pac
                 Dbcommit()
                 Dbunlock()
             Exit
             Else
                // Do ocupado
             Endif
  Enddo
        Sele d  // Detalle
        Seek str(a->Fol_lab,10)
        Do While (Nro_bon=a->Fol_lab).and.!eof()
             If Nro_for=0 
                    DbSkip()
                    Loop
             Endif
             Sele c      //Paso Detalle
             do while .t.
                Dbappend()
                If !neterr()
                   repl Nro_bon with d->Nro_bon,Nom_ara with d->Nom_ara,Tip_pro with d->Tip_pro,;
                                    Est_inf with d->Est_inf,Con_ara with d->Con_ara,Cod_ara with d->Cod_ara,;
                                    Nro_for with d->Nro_for
                     Dbcommit()
                     Dbunlock()
                 Exit
                    Else
                // Do ocupado
                    Endif
             Enddo
             Sele d
             DbSkip()
  Enddo
        Sele a   // GeneFac
        DbSkip()
 Enddo
 Sele Genefac
 Dbclosearea()

Agradeciendo su ayuda, se despide.

Atte.

Antonio

FWH 22.10 - HARBOUR - PELLES C
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Posted: Wed Oct 10, 2018 02:10 PM

Hola Antonio,
Estuve trabajando con la migracion de varias bases de datos dbf y por ahora la forma mas rapida de pasar los datos es utilizando la siguiente intruccion,

Ejemplo:
Dbusearea(,.t.,'c:\winfarma\wfprodu',,.t.)
OpenDBF('wfprodu','Productos',.F.) // abrir la base con un ALIAS una funcion mia propia
Dbzap()
Select('wfprodu')
__Dbtrans( select('Productos'),,{|| !Deleted() }, {|| nCount++, if( nCount >= 500 ,( oMeter:Set(nVal++),Sysrefresh(),nCount:=0,.T.),.T.)} )

Espero te sea de utilidad,
Saludos Mariano

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Posted: Wed Oct 10, 2018 02:41 PM
Code (fw): Select all Collapse
FUNCTION LENTO()

   SELE GENEFAC
   SET ORDER TO...

   SEEK dtos( cFecha_exa )

   IF FOUND()

      DO WHILE ( Fec_rec = dtoc( cFecha_exa ) .AND. !eof() )

         SYSREFRESH()

         SELE b // PasoGral

         DO WHILE .T.

            SYSREFRESH()

            Dbappend()

            IF !neterr()
               REPL Nro_bon WITH a->Nro_bon, Nom_pac WITH a->Nom_pac
               Dbcommit()
               Dbunlock()
               EXIT
            ELSE
               // Do ocupado
            ENDIF

         ENDDO

         SELE d // Detalle
         SEEK str( a->Fol_lab, 10 )

         DO WHILE ( Nro_bon = a->Fol_lab ) .AND. !eof()

            SYSREFRESH()

            IF Nro_for = 0
               DbSkip()
               LOOP
            ENDIF

            SELE c //Paso Detalle

            DO WHILE .T.

               SYSREFRESH()

               Dbappend()

               IF !neterr()
                  REPL Nro_bon WITH d->Nro_bon, Nom_ara WITH d->Nom_ara, Tip_pro WITH d->Tip_pro, ;
                     Est_inf WITH d->Est_inf, Con_ara WITH d->Con_ara, Cod_ara WITH d->Cod_ara, ;
                     Nro_for WITH d->Nro_for
                  Dbcommit()
                  Dbunlock()
                  EXIT
               ELSE
                  // Do ocupado
               ENDIF

            ENDDO

            SELE d

            DbSkip()

         ENDDO

         SELE a // GeneFac
         DbSkip()

      ENDDO

   ELSE

      ? [ALGO NO ESTA BIEN]

   ENDIF

   // SELE Genefac // ???
   // Dbclosearea()

   CLOSE DATABASES

RETURN NIL


Saludos
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Posted: Wed Oct 10, 2018 02:54 PM

Amigos:

Mariano y Karinha, muchas gracias por responderme.

Hare las pruebas, para ver si logro bajar el tiempo de proceso.

Uso Fivewin y Harbour.

Si alguien me puede indicar a que se debe esta Gran diferencia en tiempo de Proceso, entre Windows XP de 32Bits y Windows 10 de 64Bits??

Muchos Saludos y muchas gracias.

Atte.

Antonio

FWH 22.10 - HARBOUR - PELLES C
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Posted: Wed Oct 10, 2018 03:01 PM

Haga una busqueda en el google por windows 10 lento. Puede ser la RAM de 8Gbs, cambia a 16 Gbs. No tengo certezca.

Use también, el HB_GCALL( .F. ) para limpiar basuras.

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 346
Joined: Mon Oct 05, 2009 03:35 PM
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Posted: Wed Oct 10, 2018 04:05 PM
tuve ese problema hace muchos años con tablas dbf.

el problema es el dbcommit()

sacalo del do while...endo de tu proceso
y lo colocas después del enddo y antes de cerrar la tabla dbf.

lo haria asi:

Code (fw): Select all Collapse
Sele GENEFAC
Seek dtos(cFecha_exa)

Do While (Fec_rec=dtoc(cFecha_exa).and.!eof())
     Sele b // PasoGral
     do while .t.
          Dbappend()
          If !neterr()
              repl Nro_bon with a->Nro_bon,Nom_pac with a->Nom_pac
              Dbunlock()
              Exit
          Else
              // Do ocupado
          Endif
      Enddo

      Sele d // Detalle
      Seek str(a->Fol_lab,10)
      Do While (Nro_bon=a->Fol_lab).and.!eof()
           If Nro_for=0
               DbSkip()
               Loop
           Endif
           Sele c //Paso Detalle
           do while .t.
               Dbappend()
               If !neterr()
                   repl Nro_bon with d->Nro_bon,Nom_ara with d->Nom_ara,Tip_pro with d->Tip_pro,;
                   Est_inf with d->Est_inf,Con_ara with d->Con_ara,Cod_ara with d->Cod_ara,;
                   Nro_for with d->Nro_for
                   Dbunlock()
                   Exit
              Else
                  // Do ocupado
              Endif
          Enddo 
          Sele d
          DbSkip()
     Enddo
     Sele a // GeneFac
     DbSkip()
Enddo

Select B
dbCommit()
Select C
dbCommit()

Sele Genefac
Dbclosearea()


Prueba y comentas

Saludos
SkyPe: armando.lagunas@hotmail.com

Mail: armando.lagunas@gmail.com
Posts: 719
Joined: Fri May 12, 2017 02:50 PM
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits SOLUCIONADO
Posted: Wed Oct 10, 2018 06:18 PM
Amigos

Muchas gracias a todos los que me respondieron.

Despues de revisar y probar cada una de las opciones que me indicaron, aplique la modificacion del Codigo de "Armando Lagunas", saque los Dbcommit() de los Do While y recupero la velocidad que tenia en Windows XP.

Infinitas gracias a todos.

Muchos Saludos

Antonio.
FWH 22.10 - HARBOUR - PELLES C

Continue the discussion