Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Rendimiento de Lookup vs Locate (https://www.clubdelphi.com/foros/showthread.php?t=89446)

Kenobi 21-11-2015 14:19:27

Rendimiento de Lookup vs Locate
 
Tengo una aplicacion que hace uso intensivo de busquedas ya que para cada grupo de controles los asocia con un dataset realizando una serie de comprobaciónes según condiciones y existencia o no en cierta y determinada tabla que contiene dichas restricciones, por tal razón recorre constantemente esta (que si bien es pequeña en cuanto a numero de registros) me pregunto si utilizando lookup en vez de locate seria mas eficiente en cuanto al uso de los recursos .....

Saludos

AgustinOrtu 21-11-2015 17:16:00

Sino tenés problemas de eficiencia yo no tocaría nada, como se dice por ahí, optimizar antes de tiempo es la raíz de todos los males

A lo sumo podes cargar de prueba un montón de registros y probar

Tampoco diste detalles sobre que tipo de componentes usas, ya que cada uno implementará de manera diferente los métodos, o incluso tiene métodos propios que son mejores. También importa el tipo de campo, los índices y si es un dataset conectado a un control data aware, etc

Kenobi 21-11-2015 20:41:22

En teoria no hay problemas de excesivo consumo de recursos
 
Sin embargo optimizar nunca esta de mas....

Gracias por tus sugerencias ...

AgustinOrtu 21-11-2015 21:10:37

En realidad si

Si no tenes problemas deberias dejar todo como esta.

Si siempre van a ser pocos registros no vas a tener problema con el locate.

Si son muchos registros la pregunta es, porque estas lanzando un locate sobre un Dataset con tantos registros? Lo mas logico es directamente traer un Dataset mas "filtrado" (tip: ejecutar SQL y traer el resultado sobre un TDataset es MUCHO mas rapido que traer todo y luego ejectar "el equivalente", ya sea locate, filter, order, etc)

Otro buen truco es, siempre que se va a realizar un proceso potencialmente largo sobre un Dataset, que esta enlazado a un control db, deshabilitar el enlace momentaneamente y volver a activarlo cuando termina el proceso

masomenos asi:

Código Delphi [-]
  Dataset.DisableControls; // DBGrids, DBEdits, etc, quedan "desconectados", al mover el Dataset o editar valores de campos no "refrescan"
  try
    while not Dataset.Eof do
    begin
      Foo(Dataset);
      Dataset.Next;
    end;
  finally
    Dataset.EnableControls;
  end;

Casimiro Notevi 21-11-2015 21:35:06

Cita:

Empezado por Kenobi (Mensaje 499689)
lookup en vez de locate

Para hacer búsquedas, ni uno ni otro. Hay que usar query.

Kenobi 21-11-2015 23:55:30

Es solo por optimizar
 
la verdad son muy pocos registros en los que debo aplicar el locate, no llegan a 100(proyectando a futuro) como aclare es por optimizar y la verdad no conocia el lookup y eventualmente choca el reposicionamiento a nivel de registros en una tabla, sobre todo cuando esta esta enlazada a un componnente visual como un grid ( claro ya se que se puede aplicar el disablecontrols) pero bueno como dije a veces veo el codigo y me apetece buscarle la vuelta para mejorarlo

ecfisa 22-11-2015 00:25:01

Hola Kenobi.

El método Lookup internamente usa el método Locate (que no es ninguna maravilla). Así que hablando en términos de eficiencia, coincido con Casimiro; nada mejor que usar una consulta sql.

Aunque siendo sinceros, tratándose de esa cantidad de datos (100 filas), no vas a notar diferencia cualquiera sea el camino que elijas.

Saludos :)


La franja horaria es GMT +2. Ahora son las 22:54:52.

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