Ver Mensaje Individual
  #1  
Antiguo 15-01-2015
orihuela orihuela is offline
Registrado
NULL
 
Registrado: ene 2015
Posts: 5
Reputación: 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