Páginas filhas
  • Desempenho “Eval” x “&”

As formas usadas para executar um código ADVPL por macro execução são “Eval” e “&”, porém essas duas tem desempenhos diferentes.
Realizamos um teste comparando os dois desempenhos numa repetição de 100.000 vezes.

Tempo chamada de função usando “Eval”: 0.703
Tempo chamada de função usando “&”: 0.531

Teste:
// EvalVsETeste.prw

#INCLUDE "TOTVS.CH"

 

Static nVezes := 100000 // Repetições de testes

 

Function EvalVsETeste()

 

// Teste com "&"

TesEcom()

// Teste com Eval()

TesEval()

 

Return

 

Static Function TesEcom()

 

Local cBloco       := ""        // Bloco de códigos

Local nX           := 0         // Contador de repetições

Local nSeconds    := 0         // Segundos que iniciou a rotina

Local cRet         := "0"       // Retorno do Bloco de Codigo

 

nSeconds := Seconds()

 

For nX := 1 To nVezes

       cBloco := "FunTesExec(53, 10)"

       cRet := &(cBloco)

Next nX

 

ConOut("Tempo chamada de função usando 'Macro Execução': " + AllTrim(Str(Seconds() - nSeconds)) )

 

Return

 

Static Function TesEval()

 

Local nX           := 0  // Contador de Repetições

Local nSeconds    := 0  // Segundos que iniciou as Operacoes

Local cRet         := "" // Retorno do Bloco de Codigo

 

nSeconds := Seconds()

 

For nX := 1 To nVezes

       bBloco := {|N| x := FunTesExec(53, 10)}

       cRet := Eval(bBloco)

Next nX

 

ConOut("Tempo chamada de função usando 'EVAL': " + AllTrim(Str(Seconds() - nSeconds)))

 

Return

 

Function FunTesExec(nExpr, nTam)

 

Local cNum := ""         // Retorno da funcao de teste

 

Default nExpr     := 1

Default nTam       := 1

 

// Teste de Str para gerar processamento

cNum := StrZero(nExpr,nTam)

 

Return cNum

 

  • Sem rótulos