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

 

  • Sem rótulos