A função ValType tem mais desempenho que a função Type, mas é recomendável que antes de usa-la, seja analisado conforme escrito no tópico “Padrões de design Microsiga Protheus”.
Realizamos um teste comparando os dois desempenhos numa repetição de 100.000 vezes.
Tempo usando função ValType: 0.093
Tempo usando função Type com declaração de uma Variável Local: 3.859
Tempo usando função Type sem declaração de uma Variável Local: 3.859
// TypeVsValTypeTest.prw
#INCLUDE "TOTVS.CH"
Static nVezes := 100000 // Numero de Repeticoes
// Chama funcao separadamente testando cada cenário
Function TypeVsValTypeTest()
// Testa função ValType
TestValType()
// Testa funcao Type
TestType()
// Teste funcao type sem declarar variavel
TestNValType()
Return
// Testa função ValType
Static Function TestValType()
Local cTeste // Variavel de Teste
Local cRet := "" // Retorno da funcao ValType
Local nX := 1 // Contator para o for de Repeticao
Local nSeconds := Seconds() // Armazena segundos inicial
For nX := 1 To nVezes
cRet := ValType(cTeste)
Next nX
ConOut("Tempo chamada ultilizando função ValType " + AllTrim(Str(Seconds() - nSeconds) ))
Return
// Testa funcao Type
Static Function TestType()
Local nX := 1 // Contator para o for de Repeticao
Local nSeconds := Seconds() // Armazena segundos inicial
Local cRet := "" // Retorno da funcao ValType
Local cTeste // Variavel de Teste
For nX := 1 To nVezes
cRet := Type("cTeste")
Next nX
ConOut("Tempo chamada ultilizando função Type com declaração da Variavel" + AllTrim(Str(Seconds() - nSeconds) ))
Return
// Teste funcao type sem declarar variavel
Static Function TestNValType()
Local nX := 1 // Contator para o for de Repeticao
Local nSeconds := Seconds() // Armazena segundos inicial
Local cRet := "" // Retorno da funcao ValType
For nX := 1 To nVezes
cRet := Type("cTeste")
Next nX
ConOut("Tempo chamada ultilizando função Type sem declarar variavel" + AllTrim(Str(Seconds() - nSeconds) ))
Return