Quando falamos em chamada de classe, é claro que levamos em conta a chamada do método,  então o desempenho de chamada de uma classe sempre é feito através de um método para conseguimos fazer uma comparação equivalente de uma função.

 

Exemplo:


oObj:Saldo()
e
Saldo()

Porém não chamar os métodos de uma classe, sem instacia-la, então fizemos três exemplo de desempenhos e tivemos os seguintes resultados numa repetição de 100.000 vezes:

Tempo execução de função: 0.078
Tempo execução de método: 0.078
Tempo execução com instância de classe e chamada de método: 0.312

Exemplo de teste: Fonte TesteChamada.prw

// MethodVsFunctionCallTest.prw

#INCLUDE "TOTVS.CH"

 

Function MethodVsFunctionCallTest()

Local nCount      := 1        // Contador de testes

Local nSeconds    := 0        // Segundo antes de entrar na Rotina

Local oTest := Nil           // Chama classe para testar chamada

Local nTests      := 100000   // Quantidade de testes

// Aguarda estabilização do servidor

Sleep(3000)

nSeconds := Seconds()

For nCount := 1 To nTests

      Test()

Next

ConOut("Tempo execução de função: " + AllTrim(Str(Seconds() - nSeconds)) )

nSeconds := Seconds()

oTest := Dummy():Dummy()

For nCount := 1 To nTests

      oTest:Test()

Next

ConOut("Tempo execução de método: " + AllTrim(Str(Seconds() - nSeconds)) )

nSeconds := Seconds()

For nCount := 1 To nTests

      oTest := Dummy():Dummy()

      oTest:Test()

Next

ConOut("Tempo execução com instância de classe e chamada de método: " + AllTrim(Str(Seconds() - nSeconds)) )

Return

 

Function Test()

Return

 

Class Dummy

Method Dummy()

Method Test()

EndClass

 

Method Dummy() Class Dummy

Return

 

Method Test() Class Dummy

Return

 

  • Sem rótulos