Fuga de recursos
Fuga de recursos
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
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
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: Fuga de recursos
hola
prueba con checkres() y setresdebug
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.
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.
Re: Fuga de recursos
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
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
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: Fuga de recursos
hola,
después del activate deberías poner ofont:end()
y aquí tienes un ejemplo con checkres
después del activate deberías poner ofont:end()
y aquí tienes un ejemplo con checkres
Code: Select all | Expand
// 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.
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.
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Fuga de recursos
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
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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Fuga de recursos
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
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
- Antonio Linares
- Site Admin
- Posts: 42529
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 77 times
- Contact:
- Antonio Linares
- Site Admin
- Posts: 42529
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 77 times
- Contact:
Re: Fuga de recursos
Lo más aconsejable es que actualices tango xHarbour como FWH y casi seguro que esos problemas desaparecen ![Smile :-)](./images/smilies/icon_smile.gif)
![Smile :-)](./images/smilies/icon_smile.gif)
Re: Fuga de recursos
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
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
Re: Fuga de recursos
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
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
Re: Fuga de recursos
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![Very Happy :D](./images/smilies/icon_biggrin.gif)
"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
![Very Happy :D](./images/smilies/icon_biggrin.gif)
- Antonio Linares
- Site Admin
- Posts: 42529
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 77 times
- Contact:
Re: Fuga de recursos
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ó![Smile :-)](./images/smilies/icon_smile.gif)
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ó
![Smile :-)](./images/smilies/icon_smile.gif)
Re: Fuga de recursos
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![Very Happy :D](./images/smilies/icon_biggrin.gif)
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
![Very Happy :D](./images/smilies/icon_biggrin.gif)
- Antonio Linares
- Site Admin
- Posts: 42529
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 77 times
- Contact:
Re: Fuga de recursos
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
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