Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Que es mejor Agregar el Objeto al Form o crearlo en tiempo de Ejecución (https://www.clubdelphi.com/foros/showthread.php?t=74876)

JerS 14-07-2011 23:04:09

Que es mejor Agregar el Objeto al Form o crearlo en tiempo de Ejecución
 
Amigo que dicen es mejor agregar el objeto o crearlo en tiempo de ejecución? escucho comentarios

Caral 14-07-2011 23:40:41

Hola
Me imagino que sera crear el form en tiempo de diseño o en ejecucion ?.
Si es asi, me parece que da lo mismo, la diferencia seria el tiempo de programacion.
Saludos

ecfisa 14-07-2011 23:44:20

Hola JerS.

En líneas generales, la creación por código es mas veloz y ocupa menos espacio, pero implica un mayor tiempo de desarrollo.
Regularmente utilizo la creación en runtime cuando ignoro si se necesitará crear algun objeto, y de ser así, cuantos serán necesarios.

Creo que la pregunta admite muchas respuestas ya que las ventajas dependen de las diferentes situaciones a que se vaya a aplicar.


Saludos.

JerS 15-07-2011 16:52:30

Cita:

Empezado por ecfisa (Mensaje 406439)
Hola JerS.

En líneas generales, la creación por código es mas veloz y ocupa menos espacio, pero implica un mayor tiempo de desarrollo.
Regularmente utilizo la creación en runtime cuando ignoro si se necesitará crear algun objeto, y de ser así, cuantos serán necesarios.

Creo que la pregunta admite muchas respuestas ya que las ventajas dependen de las diferentes situaciones a que se vaya a aplicar.


Saludos.

necesito hacer una consulta pero que se va ha ejecutar cada 10 seg de forma continua lo estoy haciendo con un Objeto TZquery seria recomendable crear este objeto en tiempo de ejecución tomando en consideración que se crearía y liberaría cada 10 seg o es preferible agregarlo en el form y listo?

ecfisa 15-07-2011 20:27:38

Hola JerS.
Cita:

necesito hacer una consulta pero que se va ha ejecutar cada 10 seg de forma continua lo estoy haciendo con un Objeto TZquery seria recomendable crear este objeto en tiempo de ejecución tomando en consideración que se crearía y liberaría cada 10 seg o es preferible agregarlo en el form y listo?
Tomando en cuenta que se trata de un sólo objeto y que implicará tantas creaciones y liberaciones, pareciera que es más adecuado agregarlo en el form ya que es más simple. Aunque en este caso, yo no veo una ganancia clara en hacerlo por un método u otro, lo que no quiere decir que no la haya.
Una prueba que podrías hacer sin mucho costo de tiempo es ejecutar la aplicación con un modo y luego con otro para ver si existe una mejora significativa con alguno de ellos.

De todas maneras el objeto que agregues en tiempo de diseño a tu form, se libera al destruirse el mismo.

Saludos.

maeyanes 15-07-2011 20:32:09

Hola...

También puedes crearlo en tiempo de ejecución, al momento que se cree el form, usando el evento OnCreate:

Código Delphi [-]
type
  TMyForm = class(TForm)
    // .. componentes
    procedure CreateForm(Sender: TObject);
  private
    FQuery: TZQuery;
  public
    // ...
  end;

implementation

procedure TMyForm.CreateForm(Sender: TObject);
begin
  FQuery := TZQuery.Create(Self); // Usas self para que el formulario destruya el componente al destruirse.
  // Configuras las propiedades de FQuery
end;


Saludos...

Ñuño Martínez 19-07-2011 12:19:46

Cita:

Empezado por JerS (Mensaje 406501)
necesito hacer una consulta pero que se va ha ejecutar cada 10 seg de forma continua lo estoy haciendo con un Objeto TZquery seria recomendable crear este objeto en tiempo de ejecución tomando en consideración que se crearía y liberaría cada 10 seg o es preferible agregarlo en el form y listo?

Lo mejor en este caso es crearlo al iniciar la aplicación y eliminarlo al salir de ella, y usarlo cada 10 segundos.

Delphius 20-07-2011 04:01:43

Cita:

Empezado por Ñuño Martínez (Mensaje 406789)
Lo mejor en este caso es crearlo al iniciar la aplicación y eliminarlo al salir de ella, y usarlo cada 10 segundos.

Que es lo mismo, y equivalente, a tenerlo ya en tiempo de diseño colocado al TForm o TDataModule. ;) Porque el objeto, en si no se crea si no es una vez que se crea el TForm o TDataModule y se liberan junto a sus "padres".

Yo le doy un giro de tuerca... ¿y cuántos ks crees que te ganas en crear el componente por código, en runtime? :rolleyes:

Si fueran cientos o una cantidad arbitraria y desconocida de objetos los que necesitas si veo sentido llevar a cabo la programación en runtime (por que no hay otra salida) pero si es para un único objeto... ¡mejor que viva por siempre, hasta que la aplicación finalice!... pierdes más tiempo en liberarlo y matarlo que en la posible ganancia de "perfomance" de hacerlo por código.

Saludos,

Casimiro Notevi 20-07-2011 09:20:26

Estoy de acuerdo con Delphius.
Hay situaciones en las que es necesario crear dinámicamente, por ejemplo, para pedir parámetros de un informe, porque cada informe tiene parámetros distintos, entonces ahí puede estar justificado crear los componentes en tiempo de ejecución, pedir los parámetros y eliminarlos finalmente.
Pero, en general, no es necesario.

DarKraZY 20-07-2011 11:52:58

Yo creo si el componente TZQuery se crea cada diez segundos o sólo una vez no va a afectar al rendimiento tanto como...

...la transacción (conexión) que esté activa. ¿Va a estar la transacción abierta por los siglos de los siglos? ¿o se va a ir cerrando (COMMIT o ROLLBACK) cada cierto tiempo?

Hace tiempo leí que transacciones voluminosas y abiertas mucho tiempo eran un peligro, pero que también las que son cortas y cada poco tiempo.

Se necesitan más datos para decidir.

Saludos!

Casimiro Notevi 20-07-2011 12:25:37

Cita:

Empezado por DarKraZY (Mensaje 406902)
Hace tiempo leí que transacciones voluminosas y abiertas mucho tiempo eran un peligro, pero que también las que son cortas y cada poco tiempo.

Las cortas y rápidas son idóneas. Así es como debe hacerse :)

newtron 20-07-2011 14:03:25

Cita:

Empezado por Casimiro Notevi (Mensaje 406906)
Las cortas y rápidas son idóneas. Así es como debe hacerse :)

Yo estoy de acuerdo.


La franja horaria es GMT +2. Ahora son las 16:03:47.

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