Fuga de recursos

Fuga de recursos

Postby hmpaquito » Fri Nov 18, 2011 9:12 pm

Hola a todos,

Cuando el usuario lleva algo asi como cinco horas trabajando salta un error tal que:
Descripcion Error: Error BASE/1004 Class: 'SYMBOL' has no exported method: ADDCONTROL
Args:
[ 1] = U SYMBOL
[ 2] = U nil NIL

Me huele que la cosa es tema de recursos; que en mi aplicacion tengo que tener un puñado de "fugas" que multiplicado por no se cuantas horas de ejecucion/navegacion por el programa produce el error.
¿ No deberia arreglarse si en el metodo :End() de la clase TDialog pusiera
FOR i:= 1 to Len(::aControls)
::aControls[i]:End()
NEXT ?

Si ya se que puede haber objetos gdi como pen, brush y otros que pueden no estar ligados al dialogo... en fin...

Vosotros, ¿ por donde empezariais a buscar ? La cosa se me hace cada vez mas urgente.
¿ Hay alguna forma de saber que objetos son y donde, en el programa se crearon ?

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

Re: Fuga de recursos

Postby lucasdebeltran » Fri Nov 18, 2011 10:38 pm

hola

prueba con checkres() y setresdebug
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: Fuga de recursos

Postby hmpaquito » Fri Nov 18, 2011 10:55 pm

Lucas,

Es que no se bien cuando tengo que liberar los recursos;

Si yo tengo

DEFINE DIALOG oDlg

DEFINE IMAGE oImg;
OF oDlg

DEFINE FONT oFont

ACTIVATE DIALOG oDlg

Solo tengo que liberar el oFont ¿ no es asi ? Aunque viendo el codigo fwh no encuentro como libera el oImg...
A ti ¿ que te parece ?

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

Re: Fuga de recursos

Postby lucasdebeltran » Fri Nov 18, 2011 11:30 pm

hola,

después del activate deberías poner ofont:end()

y aquí tienes un ejemplo con checkres

Code: Select all  Expand view

// prueba
#include "FiveWin.ch"
static oWnd
//----------------------------------------------------------------------------//
function Main()
   local oWndEdit, oBar, oIcon, oImage
   local cName := "FiveWin power"
   local oFont

   SetResDebug(.t.)
   DEFINE FONT oFont NAME "Arial" SIZE 10, 16

   DEFINE ICON oIcon RESOURCE "test"
   DEFINE WINDOW oWnd FROM 1, 1 TO 20, 70 TITLE "I am the MDI Frame" ;
      MDI ;
      MENU BuildMenu() ; // COLOR "GR+*/RB"
      ICON oIcon
   SET MESSAGE OF oWnd TO "Main Window"
   DEFINE WINDOW oWndEdit MDICHILD OF oWnd FROM 2, 2 TO 20, 50 ;
      TITLE "I am a MDI Child" COLOR "W+/R"
   @ 4, 2 GET cName OF oWndEdit SIZE 170, 25 COLOR "BG+/B"
   DEFINE BUTTONBAR oBar _3D OF oWndEdit
   DEFINE BUTTON OF oBar
   SET MESSAGE OF oWndEdit TO "Child Window"
   ACTIVATE WINDOW oWndEdit
   ACTIVATE WINDOW oWnd MAXIMIZED ;
      VALID MsgYesNo( "Want to End ?" )

   RELEASE FONT oFont
   CHECKRES()
return nil

//----------------------------------------------------------------------------//

function BuildMenu()
   local oMenu
   MENU oMenu
      MENUITEM "&Information"
      MENU
         MENUITEM "&About..." ACTION MsgAbout( "FiveWin", "FiveTech" )
         SEPARATOR
         MENUITEM "&End..." ACTION oWnd:End()
      ENDMENU
      MENUITEM "&Child Windows"
      MENU
         MENUITEM "&Tiled" ACTION oWnd:Tile()
         MENUITEM "&Cascade" ACTION oWnd:Cascade()
      ENDMENU
   ENDMENU
return oMenu
//----------------------------------------------------------------------------//
 
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: Fuga de recursos

Postby Daniel Garcia-Gil » Fri Nov 18, 2011 11:36 pm

Hola


Todos los controles hijos son liberados automaticamente...

una forma util de ver el consumo de recursos es por medio del Task Manager de windows

abre el task manager -> View -> Select Columns, selecciona Gdi Object

ahora puedes ver de forma dinamica el consumo de gdi,puedes redimencionar tus pantallas para provocar el repintado de los controles, tambien puedes entrar y salir de los modulos y detectar cuanto tenias antes y despues de salir
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Fuga de recursos

Postby hmpaquito » Sat Nov 19, 2011 2:05 am

Lucas y Daniel,

Gracias por vuestra ayuda; utilizando la funcion checres(), que me comento lucas, y otra que he encontrado en el foro: GetGdiObjects() he disminuido bastante el uso de recursos. Daniel: todo los que encuentro en el archivo resxxx.txt son bitmap, brush y font... claro... entonces fwh, como bien dices tu, libera los recursos "hijo" de nuestros dialogos.

Bueno... ya tengo la cosa en buen camino. De nuevo, muchas gracias a los dos.

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

Re: Fuga de recursos

Postby Antonio Linares » Sat Nov 19, 2011 10:36 am

hmpaquito,

Que versión de Harbour ó xHarbour estás usando ?
regards, saludos

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

Re: Fuga de recursos

Postby hmpaquito » Sat Nov 19, 2011 11:45 am

Antonio,

xHarbour 1.0.0 beta 1 (marycastaña's time)

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

Re: Fuga de recursos

Postby Antonio Linares » Sat Nov 19, 2011 5:53 pm

Lo más aconsejable es que actualices tango xHarbour como FWH y casi seguro que esos problemas desaparecen :-)
regards, saludos

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

Re: Fuga de recursos

Postby hmpaquito » Sun Nov 20, 2011 5:22 pm

Antonio,

Gracias por el consejo. Debido a la dualidad enormidad del programa/ falta tiempo, me es, ahora mismo, muy difícil plantear actualizaciones, bien hrb, bin fwh. En cualquier caso, es algo que siempre tengo en mete.

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

Re: Fuga de recursos

Postby hmpaquito » Mon Nov 21, 2011 8:53 am

Hola de nuevo,

Una ultima cuestion. El archivo que genera CheckRes(), me muestra una cantidad de recursos...., en cambio GetGdiObjects(), o el mismisimo visor de procesos de Windows, me muestra una cantidad MAYOR, siempre.

Acaso el CheckRes() no muestra todos los recursos... ¿ qué faltaría ? ¿ quizá los handles de archivo ? Pero los handles de archivo no son gdi objects...


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

Re: Fuga de recursos

Postby rolando » Tue Jul 30, 2013 1:29 pm

Hola,

"Revivo" este post porque me interesaría conocer algo sobre la función mencionada "GetGdiObjects()".

Aclaro que busqué en el foro y la única referencia que encuentro es en este post, por esto consulto: ¿existe esta función realmente?.

De ser así, por favor un ejemplo. Gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Fuga de recursos

Postby Antonio Linares » Tue Jul 30, 2013 2:55 pm

Rolando,

No existe la function GetGdiObjects() pero si existe la función GetGuiResources():

http://msdn.microsoft.com/en-us/library/ms683192.aspx

de todas formas solo te da el número de objetos en uso, y nada más.

Usando SetResDebug( .T. ) y CheckRes() y WinExec( "notepad checkres.txt" ) puedes ver todos los que tu aplicación no ha liberado y además te indica desde que lugar de tu aplicación cada uno de ellos se creó :-)
regards, saludos

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

Re: Fuga de recursos

Postby rolando » Tue Jul 30, 2013 3:56 pm

Antonio,

Ya vengo usando SetResDebug( .T. ) y CheckRes() como indicaras hace un tiempo en otro post. Es más, la "adapté" a mis necesidades y con una tecla de función llamo a la CheckRes() y mediante un xBrowse muestro un array conteniendo la info mientras ejecuto la aplicación.

Me llamó la atención esta función "GetGdiObjects()" , que ahora sé que no existe, y por eso consultaba. Muchas Gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Fuga de recursos

Postby Antonio Linares » Tue Jul 30, 2013 4:13 pm

Rolando,

He vuelto a buscar por si acaso, y de casualidad he encontrado esto que tambien puede resultar muy util:

http://www.nirsoft.net/utils/gdi_handles.html
regards, saludos

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

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Antonio Linares, Google [Bot] and 28 guests