La función ValType tiene más desempeño que la función Type, pero es recomendable que antes de utilizarla, se analice de acuerdo con lo escrito en el tópico "Estándares del diseño Microsiga Protheus".
Realizamos una prueba comparando los dos desempeños en una repetición de 100.000 veces.
Tiempo utilizado con la función ValType: 0.093.
Tiempo utilizado con la función Type con declaración de una variable local: 3.859.
Tiempo utilizado con la función Type sin declaración de una variable local: 3.859.
// TypeVsValTypeTest.prw
#INCLUDE "TOTVS.CH"
Static nVezes := 100000 // Número de repeticiones
// Llama la función por separado probando cada escenario
Function TypeVsValTypeTest()
// Prueba la función ValType
TestValType()
// Prueba la función Type
TestType()
// Prueba la función type sin declarar la variable
TestNValType()
Return
// Prueba la función ValType
Static Function TestValType()
Local cTeste // Variable de prueba
Local cRet := "" // Retorno de la función ValType
Local nX := 1 // Contador para la repetición
Local nSeconds:= Seconds() // Almacena segundos inicial
For nX := 1 To nVezes
cRet := ValType(cTeste)
Next nX
ConOut("Tiempo de llamada utilizando la función ValType " + AllTrim(Str(Seconds() - nSeconds) ))
Return
// Prueba la función Type
Static Function TestType()
Local nX := 1 // Contador para la repetición
Local nSeconds := Seconds() // Almacena segundos inicial
Local cRet := "" // Retorno de la función ValType
Local cTeste // Variable de prueba
For nX := 1 To nVezes
cRet := Type("cTeste")
Next nX
ConOut("Tiempo de llamada utilizando la función Type con declaración de la variable" + AllTrim(Str(Seconds() - nSeconds) ))
Return
// Prueba la función type sin declarar la variable
Static Function TestNValType()
Local nX := 1 // Contador para la repetición
Local nSeconds := Seconds() // Almacena segundos inicial
Local cRet := "" // Retorno de la función ValType
For nX := 1 To nVezes
cRet := Type("cTeste")
Next nX
ConOut("Tiempo de llamada utilizando la función Type sin declarar la variable" + AllTrim(Str(Seconds() - nSeconds) ))
Return