Ahhh... Maurice. Un capo. On 11/15/06, oscar.zarate <[EMAIL PROTECTED]> wrote:
Martín: http://www.theproblemsolver.nl/downloads_vfp.htm#ParseLocals SaludOZ |\_/| (.. ) - / -----Original Message----- From: "Martin Salias" <[EMAIL PROTECTED]> To: "GUFA List Member" <[email protected]> Date: Wed, 15 Nov 2006 10:10:07 -0300 Subject: [GUFA] _vfp.LanguageOptions y object = NULL > Hola, OZ. > > Si realmente estuvieras seguro de que nunca vas a tener una relación > bidireccional, no lo necesitarías, pero es dificil de predecir. Aunque > yo > trataría de mantener esa premisa, me parece que nunca está de más > poner a > null las referencias a todos los objetos dependientes que tenga una > clase en > su Destroy. > > En el ejemplo tuyo lo estás haciendo desde el código cliente, y si > hay una > relación bidireccional no funcionaría, porque al poner a null tus > variables > locales, te estás quedando igual con las referencias que cada objeto > mantiene entre sí. ¿Se entiende? Por eso hay que hacerlo en el > Destroy de > cada clase. > > Respecto al ParseLocals, no lo conozco. Mandame un link o algo así lo > miro. > Todo lo que tenga que ver con análisis estático es interesante porque > podríamos llegar a usarlo en algunas herramientas que tenemos en danza > con > Andy McNeil. > > Saludos, > MS > > > On 11/14/06, oscar.zarate <[EMAIL PROTECTED]> wrote: > > > > Hola muchachotes~!!! > > > > Che, Martín, vale decir que si no hay graves problemas de diseño, > no > > sería necesario destriur explicitamente el Objeto? > > > > Con respecto al ejemplo que vos decis, si: > > > > local oCosa > > oCosa = NewObject( "BlaBla" ) > > > > OtroObjeto( oCosa ) && recibe la referencia y la guarda en una > propiedad > > > > OtroObjeto = NULL > > RELEASE OtroObjeto > > > > oCosa = NULL > > RELEASE oCosa > > > > Estamos bien y si es necesario. > > > > > > > > Con respecto a lo del tipado, "Parselocals" te avisa (en Design Time) > > que no te hayas olvidado de declarar nada (es un Parser, pero un poco > > limitado) por eso es que preguntaba si conocian algo mejor, pero en > ese > > caso debería recomendar el Parselocals. > > > > SaludOZ > > |\_/| > > (.. ) > > - / > > > > > > -----Original Message----- > > From: "Martin Salias" <[EMAIL PROTECTED]> > > To: "GUFA List Member" <[email protected]> > > Date: Tue, 14 Nov 2006 10:03:30 -0300 > > Subject: [GUFA] _vfp.LanguageOptions y object = NULL > > > > > Hola, chicas. > > > > > > En realidad, las situaciones en que el Grabage Collector se mama y > no > > > libera > > > las referencias es cuando tenés scopes cruzados. > > > > > > Es decir, que en el ejemplo de OZ: > > > > > > local oCosa > > > oCosa = NewObject( "BlaBla" ) > > > > > > * hago algo enteramente local... > > > return > > > > > > no pasa naranja. El problema es cuando hacés: > > > > > > local oCosa > > > oCosa = NewObject( "BlaBla" ) > > > > > > OtroObjeto( oCosa ) && recibe la referencia y la guarda en una > > > propiedad > > > > > > return > > > > > > Obviamente, al terminar de ejecutar el método el objeto no se > libera, > > > porque > > > lo que perdió scope es oCosa, que es sólo una referencia, pero el > > > reference > > > count del objeto mismo bajó de 2 a 1 (hasta que no llega a cero no > se > > > libera). Ahora, si OtroObjeto se destruye, la cuenta daría cero y > la > > > instancia de BlaBla quedaría liberada ...salvo que... esa > instancia de > > > BlaBla tenga una referencia a su vez a OtroObjecto, porque entonces > > > OtroObjeto no termina de liberarse porque tiene una referencia viva > (en > > > la > > > instancia de BlaBla) y la instancia de BlaBla no termina de > liberarse > > > porque > > > tiene una ferencia viva (la propiedad en OtroObjeto). > > > > > > Si, has creado tu memory leak, finalmente. Para evitar este > problema > > > (que > > > afecta a casi cualquier Garbage Collector) hay dos estrategias > > > principales > > > (en orden de prioridad): > > > > > > 1 - EVITAR las referencias bidireccionales. En principio esto > apesta > > > desde > > > el punto de vista de diseño > > > 2 - Acostumbrarse a anular (this.pepe=null) las referencias en los > > > destructores de las clases. > > > > > > ¿Se comprende? > > > > > > Respecto al LanguageOptions, OZ, no hay nada mucho más estricto en > > > VFP. No > > > hay manera de obligar realmente a que se declaren las cosas (esto > sólo > > > te > > > chilla en el DebugOut, que no mira casi ni el loro) pero no genera > nada > > > más. > > > > > > Abrazos, > > > MS > > > > > > > > > On 11/14/06, Christian Gutman <[EMAIL PROTECTED]> wrote: > > > > > > > > Hola Oscar > > > > > > > > A mi forma de ver... > > > > > > > > Fox mata la referencia, y libera el objeto, el tema es que , no > > > siempre es > > > > asi. > > > > Fox lo limpia, pero queda en memoria > > > > > > > > Lo ideal, para todo tipo de variables y objetos, en fox es > > > > > > > > miVariableOPropiedad = null > > > > Release miVariableOPropiedad > > > > > > > > Con eso estas forzando al engine a limpiar. > > > > > > > > Christian > > > > > > > > -----Mensaje original----- > > > > De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de > > > oscar.zarate > > > > Enviado el: martes, 14 de noviembre de 2006 2:18 > > > > Para: GUFA List Member > > > > Asunto: [GUFA] _vfp.LanguageOptions y object = NULL > > > > > > > > Como va la banda? > > > > > > > > Gente, alguien conoce algo tipo el "Parselocals" pero un poco > más > > > ... > > > > mejor? :-P Algo que complemente para design time el > > > _vfp.LanguageOptions > > > > = 1. > > > > > > > > > > > > > > > > Por otro lado, yo recuerdo el tema de ... > > > > los objetos deben ser asignados a NULL cuando queremos "matarlos" > > > > ahora, con el tema del scope de los objetos, sigue siendo > necesario > > > > matarlos o se mueren solos? > > > > > > > > > > > > Ej: > > > > LOCAL Algo > > > > > > > > Algo = CREATEOBJECT("Excel.Application") > > > > > > > > RETURN > > > > > > > > > > > > Este Algo, se murio, no? Solo nos que por una cuestion de "buenos > > > > modales" la necesidad de hacer: > > > > > > > > LOCAL Algo > > > > > > > > Algo = CREATEOBJECT("Excel.Application") > > > > > > > > Algo = NULL > > > > > > > > RETURN > > > > > > > > > > > > o alguno recuerda algun caso donde si o si sea necesario e > > > > imprescindible matarlo? > > > > > > > > SaludOZ > > > > |\_/| > > > > (.. ) > > > > - / > > > > > > > > > > > > > > > > __________ Información de NOD32, revisión 1863 (20061113) > > > __________ > > > > > > > > Este mensaje ha sido analizado con NOD32 antivirus system > > > > http://www.nod32.com > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Martín Salías > > > www.Salias.com.ar > > > Agile Alliance Member - Microsoft MVP > > > > > > > > > -- > Martín Salías > www.Salias.com.ar > Agile Alliance Member - Microsoft MVP
-- Martín Salías www.Salias.com.ar Agile Alliance Member - Microsoft MVP
