Como sé que tu tienes muchas modificaciones en E1 mete esta funcion en
el MSGENVIR.prg :
//---------- --------- --------- --------- --------- --------- ---//
// Libera la memoria ocupada por el array __aHCls
procedure FreeDbClass( )
__aHCls := nil
hb_gcAll( .t. )
return
//---------- --------- --------- --------- --------- --------- ---//
Verás que la memoria es mínima :-(
--- En eagle1@yahoogroups. com, "loloexpo" <messoft@... > escribió:
>
> No Vladimir de eso no puede ser el array sólo contiene el nombre y el
> manejador y en el programa que lo usa comprueba que no sea redundante,
> pero aún así lo voy a comprobar...
>
>
> --- En eagle1@yahoogroups. com, "cps_envios" <cps_envios@ >
escribió:
> >
> >
> > Estimado Manuel
> > Tengo el MSGENVIR.prg y analizandolo enecuentro
> >
> >
> >
> > Que la variable __aHCls se le agrega AAdd( __aHCls, { cClsName,
> > __nClassH } ) la clase
> > y su manejador pero jamas se liberan por eso creo que se consume la
> > memoria con
> > data fields
> >
> >
> > static __aHCls := {}
> >
> > #include "HbClass.ch"
> >
> > //---------- --------- --------- --------- --------- --------- ---
> > --------//
> > // Generador de clases dinamicas
> >
> > function MyGenClass( cClsName, FromClass )
> >
> > local n, __nClassH, __odB
> > local cFromClass := upper( FromClass:ClassName () )
> >
> > cClsName := "TMY" + Upper( if( empty( cClsName ), ;
>
> PadL( len( __aHCls ), 7, "0" ), Alltrim(
> > cClsName ) ) )
> >
> > if ( n := AScan( __aHCls, { |aClass| aClass[ 1 ] ==
> > cClsName } ) ) == 0
> > _HB_CLASS cClsName
> > __oDb := HBClass():New( cClsName, { cFromClass } )
> > __oDb:Create( )
> > __nClassH := __oDb:hClass
> > AAdd( __aHCls, { cClsName, __nClassH } )
> > else
> > __nClassH := __aHCls[ n, 2 ]
> > endif
> >
> > return( __clsInst( __nClassH ) )
> >
> >
> >
> > Ahora si creo una funcion para eliminar del __aHCls los manejadores
> > de la clase una vez q termino de usarla
> >
> >
> >
> > /// eliminar de __aHCLS la clase generada
> >
> > Function CloseClass( cClsName )
> > Local n
> > if ( n := AScan( __aHCls, { |aClass| aClass[ 1 ] ==
> > cClsName } ) ) == 0
> > // ya se creo la clase
> > else
> >
> >
> > PREGUNTAS
> > 1.Esto elimina el manejador y la clase
> >
> > __aHCls[ n, 1 ]:=NIL
> >
> > __aHCls[ n, 2 ]:=NIL
> >
> >
> > 2.Es necesario eliminrlo del arreglo
> >
> > ADEL( __aHCls , n )
> >
> > 3.Es necesario temabien eliminar la variable q trae el objeto
> > cClsName:=NIL
> >
> > endif
> >
> > return( cClsName )
> >
>