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


 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2015
orihuela orihuela is offline
Registrado
NULL
 
Registrado: ene 2015
Posts: 5
Poder: 0
orihuela Va por buen camino
Gestion de la memoria

Hola a todos, tengo una pregunta tecnica que me gustaria resolver para quedarme tranquilo. Estoy desarrollando una aplicacion en delphi para android y estoy utilizando el patrón arquitectónico "modelo-vista-controlador", aparentemente todo funciona, pero si he notado que cuando la app trabaja mucho la memoria ram del dispostivo se llena (aunque no considerablemente), lo que implica que no se esta liberando bien la memoria y particularmente tengo una duda:

tengo una clase modelo generica que crea un componente tsqlquery en tiempo de ejecucion, el controlador llama al modelo y este devuelve un tsqlquery cargado con la consulta pertinente, a continuacion el controlador delvuelve el tsqlquery al formulario(vista). Os pongo un ejemplo generico:

<<vista>>
type
TForm2 = class(TForm)

procedure FormShow(Sender: TObject);


private
sql:tsqlquery;

public
{ Public declarations }
end;

implementation

procedure TForm1.FormShow(Sender: TObject);
var cliente:tcliente;

begin
cliente:= Tcliente.create;

//esta funccion del controlador cliente carga el tsqlquery con la lista de clientes.
cliente.listarcliente(sql);
// una vez cargado la variable sql se realizan mas operaciones;

end;

< controlador cliente, funcion listar cliente >

procedure TCliente.ListarClientes (var SQL: TSQLQUERY);
var modelocliente: TModeloCliente;


begin

// cuando se ejecuta el contructor del modelo cliente, éste crea un tsqlquery y lo inicializa, el destrucctor de la clase libera dicho tsqlquery.
modelocliente:=TModeloCliente.Create;
// esta funcion devuelve el tsqlquery creado en el contructor y cargado con la consulta.
SQL:= modeloCliente.ListarClientes();
end;


Mi pregunta es, ¿ESTA ASIGNACION SE COPIA POR VALOR O POR REFERENCIA?
SQL:= modeloCliente.ListarClientes();

Lo que si puedo decir es que una vez finalizada la funcion del controlador, el destructor del modelo cliente actua y libera el tsqlquery. Aun así la variable sql del formulario esta correctamente cargada y no esta liberada, lo que me hace pensar que es por copia o que no se esta liberado bien. El problema de la ram puede venir por ahí. cada vez que se crea el modelo se crea un nuevo tsqlquery, ¿se habra liberado el espacio reservado para el anterior?
Responder Con Cita
 



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
Gestion de proyectos Angel Vicente Varios 0 15-03-2010 14:37:36
gestion de memoria delphi joni Varios 1 17-03-2005 21:03:36
ISC ERROR CODE:335544344 I/O error for file "c:\gestion\gestion.gdb" eliasterrero Firebird e Interbase 2 28-06-2004 12:20:25
Gestion de Memoria craven Varios 1 04-07-2003 04:31:16
Gestión de Memoria ogorut Varios 2 09-05-2003 17:26:11


La franja horaria es GMT +2. Ahora son las 14:35:39.


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