PDA

Ver la Versión Completa : Rendimiento de Lookup vs Locate


Kenobi
21-11-2015, 14:19:27
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
Sin embargo optimizar nunca esta de mas....

Gracias por tus sugerencias ...

AgustinOrtu
21-11-2015, 21:10:37
En realidad si (https://www.google.com.ar/search?btnG=1&pws=0&q=premature+optimization+root+of+all+evil&gws_rd=cr,ssl&ei=l85QVqy7MMXswAS_-oygAQ)

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:


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
lookup en vez de locate Para hacer búsquedas, ni uno ni otro. Hay que usar query.

Kenobi
21-11-2015, 23:55:30
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 :)