programa colgado en memoria

programa colgado en memoria

Postby Francisco Horta » Thu Feb 16, 2012 4:24 pm

hola foro,

pues tengo un gran problema,
desde hace 1 semana aproximadamente y de ahi en adelante, despues de hacer varios cambios al sistema, detecte que mi .exe se queda en memoria (procesos) colgado como de 5 a 15 segundos, cosa que antes no hacia y lo peor, de pronto me empezo a enviar al cerrar el programa este error y no se de que es, adjunto imagen

Image


no he cambiado de version de sistema operativo windows, no he cambiado de version ni actualizado nada del software que uso para el desarrollo, fwh1103, xharbour, tmysql y las lib de mysql, ni version de mysql..... bajo windows 7 pro
unicamente cambios a mis .prg y recompilar...
alguna pista???
gracias
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: programa colgado en memoria

Postby Antonio Linares » Thu Feb 16, 2012 5:25 pm

Paco,

Mantén abierto el administrador de tareas de Windows y selecciona desde su menú el ver la memoria que consume tu aplicación y observa si va consumiendo más y más, pudiera ser eso llegando a un punto en que se cae la aplicación
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42103
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: programa colgado en memoria

Postby Antonio Linares » Thu Feb 16, 2012 5:30 pm

Tambien puedes monitorizar los objetos GDI usados y los handles abiertos:

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42103
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: programa colgado en memoria

Postby Francisco Horta » Thu Feb 16, 2012 6:12 pm

Gracias antonio,

revisando cuando acceso al sistema le memoria esta en 12,000 kb aprox. con 110 handles y 250 gdi, conforme trabajo aumenta la memoria a 30,000 kb con 120 handles y hasta 530 gdi y conforme cierro procesos los gdi bajan hasta 350 pero ya no en los originales y la memoria ya no baja sino hasta 29,000 kb, es esto normal? se supone que todas las font, brush, print, bitmaps, querys todo los finalizo con end() y algunos con deleteobject()
se me paso comentar que el programa se queda en procesos (memoira) cuando lo finalizo, durante la operacion no me da problemas...
gracias
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: programa colgado en memoria

Postby Antonio Linares » Thu Feb 16, 2012 6:49 pm

Si los valores se estabilizan no hay problema, el problema viene cuando no paran de crecer. Observalo...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42103
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: programa colgado en memoria

Postby Francisco Horta » Fri Feb 17, 2012 6:40 am

asi es Antonio, parece que se estabilizan en cierto punto, pero me di cuenta de una cosa por la noche se me colgo hasta para el inicio y cheque con el administrador de tareas y la memoria estaba en 540,000 kb, se me hizo raro que de pronto de estar trabajando de 28000 a 30000 kb subiera tanto, dentro del sistema actualizo un archivo .log para guardar ciertos movimientos del sistema, entonces ese archivo estaba con menos de 2mb, pero al revisarlo cuando se me colgo el sistema estaba en 191mb, entonces llego a la conclusion que por ahi puede estar el problema,
si ese archivo .log se me hace muy grande se cuelga mucho el sistema, aqui el detalle es que no detecte en que momento crecio casi 190mb,
uff muchisisisimo
alguna sugerencia?
gracias
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: programa colgado en memoria

Postby Antonio Linares » Fri Feb 17, 2012 7:50 am

Paco,

Que contiene ese archivo log ?

Lo mantienes en memoría hasta que finalmente lo grabas en disco ?

Prueba a ir grabándolo a disco, conforme se genera, para asi saber que es lo que está ocurriendo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42103
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: programa colgado en memoria

Postby Francisco Horta » Sat Feb 18, 2012 7:28 pm

Antonio,
el el Main.prg tengo esto:
LOCAL cErrText := "", cErrOld := MemoRead("Cambios.log")
luego cuando accesan al sistema hago esto:
cErrText := ""
cErrText += Replicate("*",50) + CRLF
cErrText += "ACCESO AL SISTEMA" + CRLF
cErrText += "Fecha : "+Dtoc(FechaServer())+Space(18)+"Hora: "+Time() + CRLF
cErrText += "==> Usuario : (" + oApp:cIdUsuario + ") - " + oApp:cIniciales + " - " + ALLTRIM(oApp:cUsuario) + CRLF
cErrText += "==> Nivel : " + oApp:cNivel + CRLF
cErrText += Replicate("-",50) + CRLF + CRLF
cErrText += cErrOld
MemoWrit("Cambios.log",cErrText)

como se si el cambio.log se queda en memoria?

y cuando salen del sistema:
cErrText := ""
cErrOld := MemoRead("Cambios.log")
cErrText += Replicate("*",50) + CRLF
cErrText += "SALIDA DEL SISTEMA" + CRLF
cErrText += "Fecha : "+Dtoc(FechaServer())+Space(18)+"Hora: "+Time() + CRLF
cErrText += "==> Usuario : (" + oApp:cIdUsuario + ") - " + oApp:cIniciales + " - " + ALLTRIM(oApp:cUsuario) + CRLF
cErrText += "==> Nivel : " + oApp:cNivel + CRLF
cErrText += Replicate("-",50) + CRLF + CRLF
cErrText += cErrOld
MemoWrit("Cambios.log",cErrText)

gracias
paco
p.d. estoy pensando en guardar el registro de los movimientos en una tabla y olvidar este proceso del archivo .log
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: programa colgado en memoria

Postby hmpaquito » Sat Feb 18, 2012 9:32 pm

El problema esta en la salida del programa en este codigo:

cErrOld := MemoRead("Cambios.log")

La variable cErrOld se carga con muchas mb. de datos.

Hacerlo de forma mas adecuada, sin necesidad de cargar en una variable el contenido de Cambios.Log, seria asi:

.................
.................
hCambios:= FOpen("Cambios.Log")
FWrite(hCambios, cErrText)
FClose(hCambios)
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: programa colgado en memoria

Postby Antonio Linares » Sun Feb 19, 2012 9:04 am

Paco,

Si, usar una DBF te permitiría poder hacer login de todo lo que el usuario haga, procesos, etc. Es una muy buena idea :-)

hmpaquito, no hay problema por usar MemoRead(), basta con hacer la variable a nil y la memoria usada se liberará :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42103
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: programa colgado en memoria

Postby Antonio Linares » Sun Feb 19, 2012 10:57 am

Paco,

La primera comprobación a hacer y que no te he comentado es controlar el consumo de objetos GDI (fonts, bitmaps, brushes, etc.), puesto que un consumo incorrecto de objetos GDI puede acabar tirando una aplicación. Para ello lo primero que debes hacer es llamar a esta función al inicio de tu aplicación:

SetResDebug( .T. )

y justo antes de salir de tu aplicación llamar a:

CheckRes()

esto te generará un fichero checkres.txt en donde te aparecen los objetos GDI que no se han destruido ( llamando al método :End()) correctamente en tu aplicación, ó porque sea un error de programación en alguna clase, etc. Por favor haz esto y muestra aqui su contenido
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42103
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: programa colgado en memoria

Postby hmpaquito » Sun Feb 19, 2012 3:36 pm

Antonio,

Es cierto que no debe haber problema en cargar una variable string con muchas mbs. desde un memoread().
Pero en lo que yo pensaba es que ese memoread() más la siguiente concatenación de una string ENORME se produce en un momento "delicado" del programa: al salir del mismo.

¿ Qué puede pasar si se le manda el PostQuitMessage() a la aplicación, y justo en ese momento la aplicación empieza a hacer el memoread() que es de muchas mbs. más además la concatenación a la cadena obtenida que es enorme ? Pues me imagino que lo que está pasando: mucho tiempo de proceso y la aplicación termina como ventana pero en cambio se queda "pillada" leyendo el memoread() y concatenando; ya a partir de ahí el comportamiento, que quede abierta como tarea, es totalmente incontrolado. Esa es mi teoría.

Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: programa colgado en memoria

Postby FranciscoA » Sun Feb 19, 2012 4:21 pm

He utilizado esta function desde hace tiempo, y hasta el momento no he tenido problemas.

//--------------------------------
Function CrlProceso(cCadena)
local cFile := (cPathDef)+"\Bitaco.txt", nHand
local cCad:=Dtoc(date())+" "+time()+": "+cCadena
local FO_READWRITE:=2, FO_SHARED:=64 , FS_END:=2 //Fileio.ch

if !file(cFile)
nHand := FCreate( cFile ) // creamos el archivo
FWrite(nHand, cCad + CRLF+"") // escribimos en el archivo
FClose(nHand) // cerramos el fichero
else
nHand := FOpen( cFile, FO_READWRITE + FO_SHARED ) // abrimos el fichero lect-escrit-compartido
FSeek(nHand, 0, FS_END) // nos colocamos al final del fichero
FWrite(nHand, cCad + CRLF+"") // escribimos en el fichero
FClose(nHand) // cerramos el fichero
endif

//WinExec("NotePad.exe "+cFile)
SysRefresh()
Return nil

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: programa colgado en memoria

Postby Francisco Horta » Mon Feb 20, 2012 6:46 pm

Antonio,
probando el
SetResDebug( .T. )

y justo antes de salir de tu aplicación llamar a:

CheckRes()

revisando el .txt se quedaban abiertos como 6 fonts y 14 bitmaps de unos menus, corregi el programa, volvi a ejecutar y parece que todo vuelve a la normalidad, esto me arroja el checkres.txt
20/02/2012 12:31:35: ====================================================================================================

de cualquier forma a hmpaquito y mi tocayo, por ahi me parece buena su sugerencia del fope,fwrite y fclose, voy a probar, por lo pronto el programa ya no se queda cogado en memoria, seguire haciendo pruebas
gracias
saludos
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: programa colgado en memoria

Postby Francisco Horta » Mon Feb 20, 2012 8:11 pm

Antonio,

por ahi detecte algunos bmps al salir que no se finalizan, son de un menu,
Code: Select all  Expand view  RUN

    MENU ::oMenu[6] POPUP 2007
       MENUITEM "Catálogo"     FILE ::cDirBmps+"Blancos16.bmp" ACTION IF( VerificaPermisos(4,3),;
                                                                          msginfo("con acceso"), )
      SEPARATOR
       MENUITEM "Entregas"     RESOURCE "Entrega16"            ACTION IF( VerificaPermisos(4,4),;
                                                                          msginfo("con acceso"), )
       MENUITEM "Devoluciones" RESOURCE "Devuelve16"           ACTION IF( VerificaPermisos(4,5),;
                                                                          msginfo("con acceso"), )
      SEPARATOR
       MENUITEM "Fórmulas"     FILE ::cDirBmps+"Formula16.bmp" ACTION IF( VerificaPermisos(4,6),;
                                                                          msginfo("con acceso"), )
    ENDMENU
 

este es el .txt
Code: Select all  Expand view  RUN

20/02/2012 14:06:59: FONT,369760081,TAPPLICATION:NEW(241)->MAIN(47)
   
20/02/2012 14:06:59: BMP,1812270401,MENUADDITEM(42)->TAPPLICATION:MENUS(301)->MAIN(81)
   
20/02/2012 14:06:59: BMP,486874086,MENUADDITEM(42)->TAPPLICATION:MENUS(304)->MAIN(81)
   
20/02/2012 14:06:59: BMP,-1794830974,MENUADDITEM(42)->TAPPLICATION:MENUS(306)->MAIN(81)
   
20/02/2012 14:06:59: BMP,50662747,MENUADDITEM(42)->TAPPLICATION:MENUS(309)->MAIN(81)
   
20/02/2012 14:06:59: FONT,-754313320,TRESERVA:NEW(156)->(b)TAPPLICATION:MENUGACC(827)->TRBTN:CLICK(579)->TRBTN:LBUTTONUP(754)->TCONTROL:HANDLEEVENT(1489)->TRBTN:HANDLEEVENT(1406)->_FWH(3409)->WINRUN(0)->TMDIFRAME:ACTIVATE(992)->TAPPLICATION:SHOWWINDOW(641)->MAIN(85)
 


y una font aplicada a un RBBTN...
como finalizarlos al cerrar el sistema?
salu2
paco
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: TOTOVIOTTI and 48 guests