実行速度計測結果が気になって,あちこち突っつくうちに,面白いことが出できた.
整数型等の規定型宣言値とObject宣言値が,down_Castされる時はBoxingが行われると認識しているのだが,
明示的に,Boxing効果をみるには
dim a as object = 10
dim i as integer = cint(a)
とすれば,良いと認識している.
これは, CLIの世界だから, C#/VBとも速度差は近似していると考えていた。
sampleソース
C#:
Object a = 10;
Object b = 20;
Object j = 0;
for (int i = 0; i < n; i++)
{
j = (int)a + (int)b;
}
VB:
Dim a As Object = 10
Dim b As Object = 20
Dim j As Object = 0
For i As Integer = 0 To n
j = CInt(a) + CInt(b)
Next
J#は不得手で,サンプルが作れなかった(ぐしゅん)
10回の測定の平均は
VB.二項加算 0.003μ秒
CS.二項加算 0.003μ秒
VB.二項加算(Boxing) 0.101μ秒
CS.二項加算(Boxing) 0.039μ秒
VBのBoxing処理は 約30倍
C#のBoxing処理は 約10倍
結構な差がつく, このソースでは,厳密な意味ではBoxingとは違うのだが,
一つの目安になるだろう。 ILレベルで追いかければ,キャストの展開の仕方の違いが判るのだろうが,
そこまではしていない(残念).
それにしても,repeatの部分にBoxingが発生する部分でのBoxingには気をつけよう。
VBとC#のこの差はなに?