http://pc5.2ch.net/test/read.cgi/tech/1091185216/778-
quicksort でこの差が出るのなら function と delegate は結構パフォーマンスが違うんじゃないかと思った。実際使う際は気にならない、という意味で quicksort だったのかもしれないけど、単体で見ないとわからんこともあるはず。この quicksort データの準備に半分の時間使ってるし。
> ./dele_fun 613 # function 2088 # delegate method 986 # delegate inner function
まぁこんなとこか。アセンブラ読む必要もなさげ。ちなみに function と関数ポインタは等速。最適化は -O を使用。 -O が無いと inner function の delegate が function と等しくなった。
> ./a.out 988 2262 54496
こっちはアセンブラ読むなりなんなりした方が良さげ。以下ソース。
private import std.date; int i; int func() { return i+2; } class C { int i; int func() { return i+2; }; void run1() { int function() fp = &.func; d_time start = getUTCtime(); for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { assert(2 == fp()); } } printf("%d\n", cast(int)(getUTCtime()-start)); } void run2() { int delegate() de = &func; d_time start = getUTCtime(); for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { assert(2 == de()); } } printf("%d\n", cast(int)(getUTCtime()-start)); } void run3() { int i = 1; int delegate() de = delegate int() { return i+2; }; d_time start = getUTCtime(); for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { assert(3 == de()); } } printf("%d\n", cast(int)(getUTCtime()-start)); } } int main() { C c = new C(); c.run1(); c.run2(); c.run3(); return 0; }