Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Post Reply
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Post by remtec »

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
mterraz
Posts: 41
Joined: Mon Jun 10, 2013 1:21 pm

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Post by mterraz »

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

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Post by karinha »

Code: Select all

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

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Post by remtec »

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

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Post by karinha »

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

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits

Post by armando.lagunas »

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


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

Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits SOLUCIONADO

Post by remtec »

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.
Post Reply