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.