2012-03-14 9 views
5

匿名関数と通常関数の間にパフォーマンスに違いはありますか?たとえば、関数呼び出しのオーバーヘッドの変更は?匿名関数と通常関数の間にパフォーマンスに違いはありますか?

ありがとうございました!

+0

ます(ただし、JavaScriptをを)興味があり、関連する記事は:http://stackoverflow.com/questions/80802/does-use-of-anonymous-functions-affect-performance –

答えて

9

残念ながら、私は、件名に特定の何かを見つけることができませんでした。しかし、無名関数は、通常の関数に比べてオーバーヘッドが増えるはずです。

あなた自身で試してみることができます。まずnonanon.m

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

ファイルを作成後にセルファイルを作成します。

%% 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 

楽しむ、出力:

経過時間は0.513759秒です。

経過時間が14.434895秒です。匿名関数が遅いと結論

+0

ありがとう!私はなぜそれが疑問ですか? – Tim

+1

Matlabは関数を名前と関数ハンドルで呼び出します。デフォルトでは、匿名関数は第2のメカニズムを介して呼び出されます。私は後者が遅いと思います。ただし、Mathworksでは特定の情報はリリースされていません。 –

0

私はy=x*xを使用しての代わりに、(nonanonanon場合の両方で)の二乗user677656の小さなテストコードを繰り返したが、小さな変種:

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

私が代わりにy=x^2バリアントを使用している場合は、私が手user677656と同様の結果:

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

これは、Matlabの2012Bです。私はなぜ地球上でこれらの結果が異なるのか分かりません。

Iはまた、nonanon場合の(2.8 3.9対秒)わずかな利点をもたらしx*x場合、及びy=sqrt(x)、同様の結果を与えるy=sin(x)を試験しました。

関連する問題