2012-03-14 3 views
5

Ci saranno differenze di prestazioni tra funzioni anonime e funzioni normali? Ad esempio, qualsiasi modifica del sovraccarico delle chiamate alle funzioni?Ci saranno differenze di prestazioni tra funzioni anonime e funzioni normali?

Grazie e saluti!

+0

Un post correlato che potrebbe interessarti (ma su JavaScript): http://stackoverflow.com/questions/80802/does-use-of-anonymous-functions-affect-performance –

risposta

9

Purtroppo, non ho trovato nulla di specifico sull'argomento. Tuttavia, le funzioni anonime dovrebbero avere un overhead aggiuntivo rispetto alle normali funzioni.

Puoi provarlo tu stesso. In primo luogo creare il file nonanon.m

function x=nonanon(y) 
    x=y^2; 
end 

Quindi creare un file di cella con:

%% non anon 
tic 
for i=1:1000000 
    z=nonanon(i); 
end 
toc 

%% anon 
[email protected](x) x^2; 
tic 
for i=1:1000000 
    z=f(i); 
end 
toc 

godere, l'output:

tempo trascorso è 0.513759 secondi.

Il tempo trascorso è 14,434895 secondi.

Il che conclude che le funzioni anonime sono più lente.

+0

Grazie! Mi chiedo perché è così? – Tim

+1

Funzioni di chiamata Matlab per nome e per handle di funzione. Per impostazione predefinita le funzioni anonime vengono richiamate tramite il secondo meccanismo. Immagino che quest'ultimo sia più lento. Tuttavia, Mathworks non rilascia informazioni specifiche sull'argomento. –

0

ho ripetuto poco codice di prova user677656 s', ma una piccola variante utilizzando y=x*x invece di quadratura (sia nel nonanon e il caso anon):

Elapsed time is 0.517514 seconds. 
Elapsed time is 0.223450 seconds. 

Se invece usa la variante y=x^2, ottengo risultati simili a quelli user677656:

Elapsed time is 0.402366 seconds. 
Elapsed time is 7.440174 seconds. 

Questo è con Matlab 2012b. Non ho idea del perché sulla terra questi danno risultati diversi.

Ho anche testato y=sin(x) che dà risultati simili a quelli del caso x*x, e y=sqrt(x), che ha provocato un leggero vantaggio (2,8 vs 3,9 secondi) per il caso nonanon.