Se pierde memoria con xHarbour
Publicado: Jue Sep 22, 2005 7:44 pm
Estimados señores,
El siguiente ejemplo se puede apreciar como se pierde memoria en el
Administrador de Tareas de Windows.
Este problema creo que está perfectamente identificado, pero no se si es
porque desconosco un buen método de hacer una destrucción del objeto.
El problema no se dá exclusivamente con classes que tienen DATAS tipo bloque
!
Esto seguramente afecta tambien a Xailer, pero lo desconozco pues no sé si
usan el mismo motor de objetos.
Tampoco conosco una mejor manera de hacer una destrucción de una clase, por
ahora coloco :
oObjeto = NIL
Esa forma es perfectamente válida por muchas clases que poseo en la
actualidad, inclusive con clases que usan DATAS tipo Array.
Espero que esto se solucione porque si no es así estamos perdiendo el tiempo
con xHarbour, y los proyectos como Xailer y Visual xHarbour tendrían una
pésima base.
Saludos
Jorge Mason
#include "FiveWin.ch"
/*
Autor : Jorge Mason
Description : Classes lost memory in windows with bBlock DATAS
Date : 19/09/2005
*/
STATIC oWnd
STATIC oTimer
FUNCTION Main()
DEFINE WINDOW oWnd TITLE "LOST MEMORY WITH MACROS ON CLASS"
DEFINE TIMER oTimer INTERVAL 500 OF oWnd ACTION Timer()
ACTIVATE TIMER oTimer
ACTIVATE WINDOW oWnd
RETURN nil
FUNCTION Timer()
LOCAL oObject
LOCAL n
FOR n = 1 TO 10
oObject := LostClass():New()
oObject = NIL
NEXT
RETURN nil
CLASS LostClass
DATA aArray
DATA bBlock
METHOD New() CONSTRUCTOR
ENDCLASS
METHOD New() CLASS LostClass
LOCAL bBlock := "{||.T.}"
::aArray = {1,2,3,4,5}
::bBlock = &bBlock
RETURN Self
El siguiente ejemplo se puede apreciar como se pierde memoria en el
Administrador de Tareas de Windows.
Este problema creo que está perfectamente identificado, pero no se si es
porque desconosco un buen método de hacer una destrucción del objeto.
El problema no se dá exclusivamente con classes que tienen DATAS tipo bloque
!
Esto seguramente afecta tambien a Xailer, pero lo desconozco pues no sé si
usan el mismo motor de objetos.
Tampoco conosco una mejor manera de hacer una destrucción de una clase, por
ahora coloco :
oObjeto = NIL
Esa forma es perfectamente válida por muchas clases que poseo en la
actualidad, inclusive con clases que usan DATAS tipo Array.
Espero que esto se solucione porque si no es así estamos perdiendo el tiempo
con xHarbour, y los proyectos como Xailer y Visual xHarbour tendrían una
pésima base.
Saludos
Jorge Mason
#include "FiveWin.ch"
/*
Autor : Jorge Mason
Description : Classes lost memory in windows with bBlock DATAS
Date : 19/09/2005
*/
STATIC oWnd
STATIC oTimer
FUNCTION Main()
DEFINE WINDOW oWnd TITLE "LOST MEMORY WITH MACROS ON CLASS"
DEFINE TIMER oTimer INTERVAL 500 OF oWnd ACTION Timer()
ACTIVATE TIMER oTimer
ACTIVATE WINDOW oWnd
RETURN nil
FUNCTION Timer()
LOCAL oObject
LOCAL n
FOR n = 1 TO 10
oObject := LostClass():New()
oObject = NIL
NEXT
RETURN nil
CLASS LostClass
DATA aArray
DATA bBlock
METHOD New() CONSTRUCTOR
ENDCLASS
METHOD New() CLASS LostClass
LOCAL bBlock := "{||.T.}"
::aArray = {1,2,3,4,5}
::bBlock = &bBlock
RETURN Self