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