Árvore de páginas

1. Evite utilizar DbSeek dentro de laços de repetição. 

A instrução DBSeek() realiza uma busca binária por uma chave parametrizada, completa ou parcial, e, em caso de sucesso, reposiciona a tabela alvo da busca no registro que atende a condição de busca, ou mediante parâmetro, no caso de não haver correspondência entre a chave de busca fornecida, o registro imediatamente posterior à chave especificada é posicionado.

Nos casos onde é utilizada uma busca que deve posicionar no próximo registro da ordem atual da tabela quando não houver correspondência exata (comportamento conhecido como Soft Seek), o TOTVS | DBAccess pode fazer muitas queries para determinar qual é este próximo registro.

Dessa forma, uma simples query pode melhorar e muito a performance de consulta ao invés de um DBSEEK.

2. AScan pode apresentar problema de excesso de consumo de tempo em dois casos:

1. O bloco de código usado para estabelecer a condição de busca contém funções dentro dele. Por exemplo:

nPos := AScan (aMeuArray , { | x | x[1] == ABC->(Recno()) })

Para cada elemento do array a ser comparado, a função Recno() é executada. Em um array de 1000 elementos, onde o elemento procurado foi encontrado na posição 750 do array, a função Recno() foi chamada 750 vezes. Caso nenhum registro seja encontrado, a função será executada 1000 vezes (tamanho do array).

Solução para este exemplo:

nABCRecno := ABC->(Recno())
nPos := AScan ( aMeuArray , { | x | x[1] == nABCRecno } )

 

2. O array pode crescer durante o processo, ou pode ser criado com um tamanho grande. 

Consequentemente a operação de varrer o array com mais elementos demora mais tempo e se nenhum elemento foi encontrado, o bloco de código informado como parâmetro será executado uma vez para cada elemento do array. Cada comparação, mesmo sendo rápida, quando executadas muitas vezes dentro de loopings, tornam o número de chamadas extremamente grande, contribuindo significativamente no tempo de processamento. Neste caso, deve ser avaliado se é possível diminuir as incidências de busca de dados dentro do array e, mediante um estudo de caso, pode-se estudar a utilização de um array ordenado, onde o algoritmo de busca é muito, mas muito mais eficiente.

 

Mais informações de desempenho: http://tdn.totvs.com/display/framework/Desempenho

 

 

  • Sem rótulos