Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Postby remtec » 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)

2. 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
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Postby mterraz » Wed Oct 10, 2018 2: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
mterraz
 
Posts: 54
Joined: Mon Jun 10, 2013 1:21 pm

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Postby karinha » Wed Oct 10, 2018 2:41 pm

Code: Select all  Expand view

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
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Postby remtec » Wed Oct 10, 2018 2: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
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Postby karinha » Wed Oct 10, 2018 3: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
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Postby armando.lagunas » Wed Oct 10, 2018 4: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: Select all  Expand view


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
User avatar
armando.lagunas
 
Posts: 346
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits SOLUCIONADO

Postby remtec » Wed Oct 10, 2018 6: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
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Adolfredo Martinez, Google [Bot] and 68 guests