+5 votos
81 visitas
Das três opções informadas, qual é mais performatica? Ou seja, executará mais rápido?
por (347 pontos) | 81 visitas

1 Resposta

+5 votos
Melhor resposta

A performance, ou tempo de execução, de um programa/algoritmo é estabelecida pela quantidade de instruções que o processador tem que executar.

No nosso caso:

*TDContainer.Locate
O locate percorre os registros comparando um campo com um valor, ou seja:
1 looping com 1 comparação.

*TDContainer.LocateWhere
O LocateWhere percorre os registros verificando se a condição é verdadeira, ou seja:
1 looping com 1 parse de expressão(quanto maior a expressão mais complexo o parse) e 1 verificação se a expressão é valida.

*Linq
O Linq percorre os itens da lista verificando se a expressão lambda é verdadeira, ou seja:
1 looping com 1 chamada de função.

Analisando assim aparentemente os 3 não teriam muita variação de performance, porém, devemos observar os seguintes pontos:

a) O Linq é compilado, logo ele roda em linguagem nativa, com certeza mais rápido que os outros.
b) O Locate faz a comparação de um campo apenas, então o tempo seria de obter o valor do campo no registro.
c) O LocateWhere tem um alto custo para quebrar a expressão informada, com certeza lento.

Então nossa classificação ficou:
1) Linq
2) Locate
3) LocateWhere

Pergunta: Então nunca devo utilizar LocateWhere do TDContainer?
Resposta: 
O TDContainer.LocateWhere deve ser utilizado apenas quando você não sabe da condição.
Por exemplo a condição é informada por um usuário do sistema e fica no banco de dados.
Se você sabe a condição, mas, precisa validar mais de um campo é recomendável 
concatenar a chave em um único campo e fazer um Locate por este campo.

Uma informação interessante é que o Locate faz um hash do campo quando o container tem mais de 100 registros, isso deixa ele muito rápido.

por (347 pontos)
editado por
LocateWhere is deprecated

Perguntas relacionadas

Melhores May 2020
  1. henrique.muller

    18 Pontos

  2. joao.melo

    14 Pontos

  3. joseglauber

    11 Pontos

  4. SlimShady

    7 Pontos

  5. willian.metalsystem

    6 Pontos

  6. lucas.melo

    3 Pontos

  7. fluipress.luciano

    2 Pontos

  8. pajucara.wallacef

    2 Pontos

  9. jean.filho

    2 Pontos

  10. maicon.pereira

    2 Pontos

200 pontos
Melhores 2020 May 25 - 31
    433 perguntas
    476 respostas
    346 comentários
    466 usuários