Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-12-2015
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 251
Poder: 22
Osorio Va por buen camino
Si solo vas a motrar datos sin ningun proceso complejo puedes considerar la opcion de usar un componente que se llama TDBCtrlGrid que esta en la paleta de Data Controls. Este hace todo el trabajo sucio y te descomplicas con la creacion y liberacion de componentes en tiempo de ejecución.
Responder Con Cita
  #2  
Antiguo 31-12-2015
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Gracias por sus consejos, pero el programa realiza todo lo que necesito, solo que eternamente mientras este en ejecución aumenta el uso de memoria.

Se crean la cantidad de frames adecuados dentro del panel correspondiente, esto porque en caso de tener, por ejemplo 20 registros, y en cada panel solamente puedo contener 8 registros (frames), necesito mostrar, por ejemplo, durante 10 segundos un panel y luego pasar al que viene, y así hasta completar el loop completo, y en ese momento actualizar la información... solo en este momento se consulta al servidor datasnap, para evitar estar conectado todo el tiempo, ya que la aplicación se ejecutará alejado geográficamente del servidor, donde eventualmente tiene mala conectividad.

Otra cosa, siempre libero los paneles antes de comenzar a crear los panes que contienen a los frames, y creo todos los paneles necesario para mostrar los registros correspondiente, pero uno sobre otro, y el loop lo unico que hace es bringtofront al panel que corresponda. Alguna otra idea para esto??

Mi problema es que me percaté del tema de la memoria, entonces mi pregunta va por el lado de saber si está bien realizado la creación y liberación de los componentes... nótece que solo libero los paneles, ya que los frames están contenidos en el panel de creación en ejecución, y esto se crean "self"... esto esta bien?? creo que si, pero no estoy seguro.

Como puedo liberar los panales sin el findcomponent??

Uffff... hartas preguntas, espero me puedan ayudar.
Saludos
Responder Con Cita
  #3  
Antiguo 31-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No se quien es "self" ya que no pusiste que clase ejecuta el codigo

Probablemente sea un form; osea que el panel va a ser liberado:

1. Cuando hagas panel.Free
2. Cuando se libere el form

Otra opcion seria no liberar los paneles, sino que reusarlos; actualizar o modificar la info y solo descartar todo cuando se cierra la aplicacion.



Otro gran problema es FindComponent. No tengo delphi a mano para probar, pero estoy seguro que FindComponent no encuentra lo que fue creado en runtime; solo lo de tiempo de diseño

Por ejemplo,

Código Delphi [-]
  AlgunForm.Components[] --> array de componentes, en tiempo de diseño
  AlgunForm.Controls[]  --> array de controles, incluye los componentes y tambien lo creado en tiempo de ejecucion

Debido a esto apuesto a que FindComponent se comporta de manera similar

Lo puedes depurar facilmente,

Código Delphi [-]

/// borrado
for I := panel_total downto 1 do
begin
  PanelDinamico := findcomponent('paneldinamico'+inttostr(i)) as Tpanel;
  if assigned (PanelDinamico) then
    PanelDinamico.free; -> punto de ruptura aca, o un showmessage ,para ver si entra al if, yo estoy seguro que no
end;

Como te decia, deberia ejecutar la aplicacion con ReportMemoryLeaksOnShutdow := True, asignalo en el OnCreate del form principal o en el inicio de la aplicacion (.dpr); esto te va a decir que objetos no estan siendo liberados, aunque tomarlo con pinzas: el que sean liberados no te garantiza que sean liberados cuanto tu quieres que sean liberados; me explico, como estas creando los paneles con un Owner (Self, el form) quiere decir que cuando muere el form, mueren los paneles, pero lo interesante en tu caso es que se liberen antes

La forma mas comoda para liberar los paneles en tu caso es, creas una simple lista y metes todos los paneles ahi, y luego simplemente la recorres y vas liberando
Responder Con Cita
  #4  
Antiguo 31-12-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.059
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por AgustinOrtu Ver Mensaje
...
Son "truquitos" que se aprenden con la experiencia
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
Liberar memoria ZayDun Varios 3 13-07-2014 15:31:12
liberar memoria componentes visuales study Varios 2 16-11-2011 17:13:30
Liberar Memoria MaMu API de Windows 6 28-06-2007 21:28:27
Liberar componentes de la memoria ingel Varios 11 29-06-2005 18:30:09
Liberar memoria de un QR. mlara Impresión 1 21-02-2004 18:31:16


La franja horaria es GMT +2. Ahora son las 21:08:15.


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