Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2017
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 22
voci Va por buen camino
Delphi 10.2 metodo Release obsoleto.

Cuando cierro un formulario secundario, hasta ahora siempre utilizaba el metodo Release para liberar la memoria:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.Release;
end;

Pero en delphi 10.2 este método es declarado como obsoleto, he intentado con el método Free pero no obtengo el mismo resultado, ¿alguien puede indicarme como hacerlo de una forma efectiva?.

Saludos.
Responder Con Cita
  #2  
Antiguo 06-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por voci Ver Mensaje
Cuando cierro un formulario secundario, hasta ahora siempre utilizaba el metodo Release para liberar la memoria:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.Release;
end;

Pero en delphi 10.2 este método es declarado como obsoleto, he intentado con el método Free pero no obtengo el mismo resultado, ¿alguien puede indicarme como hacerlo de una forma efectiva?.

Saludos.

Debería funcionar correctamente con DisposeOf según la documentación.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 06-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pues el metodo esta definido en la clase FMX.Types.TFmxObject y segun la documentacion del mismo dice:

Código Delphi [-]
procedure Release; virtual; deprecated 'Support for this method will be removed';

No encuentro ahora la referencia, pero si no me equivoco lo que hace Release era invocar a DisposeOf utilizando sincronizacion de hilos, TThread.Queue o TThread.Synchronize
Responder Con Cita
  #4  
Antiguo 07-04-2017
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 22
voci Va por buen camino
Gracias por las respuestas, ya había probado con Disposeof, el problema es que en windows me da este error:



En android simplemente cierra la aplicación, no se si es un problema de la versión de delphi.

El código que utilicé en el ejempo es este:

procedure TPrincipal.BotonClick(Sender: TObject);
begin
Form2:= TForm2.Create(nil);
Form2.show;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.DisposeOf;
end;

Saludos.
Responder Con Cita
  #5  
Antiguo 07-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Tiene sentido, porque estas liberando de memoria el form, y luego el código continua ejecutando métodos dentro de la instancia del form, pero como la destruiste... Si tenés fuentes, revisa el código que ejecuta el evento OnClose de la clase TForm (probablemente en su superclase) o pon un Punto de ruptura y sigue la ejecución del código

Intenta colocar el valor caFree en el parámetro Action, eso liberará el form cuando lo cierres.
Responder Con Cita
  #6  
Antiguo 07-04-2017
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 22
voci Va por buen camino
Gracias por tú interes, he probado con el valor cafree en el evento onclose, en windows parece funcionar bastante bien, libera bastante memoria, no toda, pero en android es otra historia, si bien no da ningún problema en la ejecución en el tema de la memoria es nefasto.

Seguiré investigando, no entiendo porque eliminaron el método Release.

Saludos.
Responder Con Cita
  #7  
Antiguo 07-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pues porque en android el manejo de memoria es ARC y el problema es que es un modelo que choca contra el modelo basado en TComponent de Delphi, y este manejarlo mediante ARC es complicado por las referencian circulares. Podrías probar usar un owner cuando creas el form y no nil
Responder Con Cita
  #8  
Antiguo 07-04-2017
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 22
voci Va por buen camino
En cuanto pueda lo pruebo, había leido que delphi tiene problemas con la memoria ARC, pero con la 10.1 y el método release la misma aplicación liberaba mucha más memoria al cerrar los diferentes formularios.

Saludos.
Responder Con Cita
  #9  
Antiguo 10-04-2017
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 22
voci Va por buen camino
Parece que la gestión de la memoria ARC es peor en 10.2 que en 10.1.2, he creado una aplicación con varios formularios en los que se cargan imágenes y a la hora de cerrar dichos formularios con la versión compilada en 10.2 se libera mucha menos memoria que en la compilada con 10.1.2, no se a que es debido, pero es así.

Lo que si parece que han solucionado es un problema con el teclado virtual de android en algunos dispositivos, al menos en mi dispositivo ahora si que funciona correctamente el componente Tedit.

Saludos.
Responder Con Cita
  #10  
Antiguo 10-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
A ver si esto te puede ayudar:

https://forums.embarcadero.com/threa...hreadID=117312

http://stackoverflow.com/questions/2...in-android-ios

Por cierto, como controlas la memoria para saber cuanto se ha liberado?
Responder Con Cita
  #11  
Antiguo 10-04-2017
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 22
voci Va por buen camino
En ajustes-> aplicaciones-> ejecución, ahí veo el consumo de memoria de la aplicación.

Saludos.
Responder Con Cita
  #12  
Antiguo 10-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Creo recordar que en una version anterior de Android existia lo que comentas; hoy yo ando con Android 7.1.2 y no tengo esa informacion. Hoy el unico dato relacionado que me ofrece es el promedio de memoria usado en las ultimas 3 horas. Habria que probar con alguna otra aplicacion de terceros tipo "administrador de procesos"
Responder Con Cita
  #13  
Antiguo 01-07-2017
voci voci is offline
Miembro
 
Registrado: oct 2003
Posts: 97
Poder: 22
voci Va por buen camino
Con el hotfix de junio han solucionado todos los problemas que había en android con la liberación de memoria en la versión 10.2, además de otros muchos.

RSP-17308 TForm.Close and caFree not Working with Android
RSP-17120 caFree not working (Android)

He compilado un programa y parece funcionar perfectamente todo lo relacionado con la memoria, además el teclado virtual que a mi particularmente me daba problemas de cierre de aplicación, ahora también funciona correctamente.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tipo de Compilación (Debug/Release) y Tamaño de Exe Delphi 2010 Neeruu Varios 0 05-09-2012 16:12:12
Delphi Compiler: Base, Release, Debug? Neeruu Varios 1 12-07-2012 13:03:54
Twain obsoleto y D 2006 maxvera Gráficos 5 28-09-2011 15:52:44
Como ipconfig /release desde delphi voci Internet 3 18-01-2008 09:09:15
Migración a 10g release 2 - Problemas con la aplicación de Delphi .NET SMTZ .NET 2 11-07-2006 10:58:20


La franja horaria es GMT +2. Ahora son las 01:45:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi