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
Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
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
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
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
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
João Santos - São Paulo - Brasil
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
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
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
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits
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.
Use también, el HB_GCALL( .F. ) para limpiar basuras.
Saludos.
João Santos - São Paulo - Brasil
- 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
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:
Prueba y comentas
Saludos
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()
Saludos
Re: Favor Ayuda PROGRAMA LENTO WINDOWS 10 64 Bits SOLUCIONADO
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.
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.