Integerを試したならばByteでも試そうか。


ということで、Byte型について、CTypeとDirectCastについて実行速度を比較してみるでござる。


(ソースコードがコピペで済むし、記事が増えて、ブログ全体としての、見た目がよくなるとか、そんなこと考えてないんだからね。Short型についてもやってみようとか、考えているんだからね。



▽実行環境(の目安)

CPU: 3.00GHz (論理コア数: 2)

メモリ: 4.00 GB

開発環境: Visual Basic 2008


▽実験方法

CType、DirectCastをそれぞれ、for分でぐるぐるまわし、100,000,000回。

下にソースコードが書いてある。



▽ソースコード

-----

Module Module1

Sub Main()
Dim count As Integer = 100000000

compute_CType_Byte(count)
compute_DirectCast_Byte(count)

compute_CType_Byte(count)
compute_DirectCast_Byte(count)

compute_CType_Byte(count)
compute_DirectCast_Byte(count)

compute_DirectCast_Byte(count)
compute_CType_Byte(count)

compute_DirectCast_Byte(count)
compute_CType_Byte(count)

compute_CType_Byte(count)
compute_DirectCast_Byte(count)

compute_CType_Byte(count)
compute_CType_Byte(count)

compute_DirectCast_Byte(count)
compute_DirectCast_Byte(count)

Console.ReadLine()

End Sub

Sub compute_CType_Byte(ByVal count As Integer)
Dim obj As Object = CType(0, Byte)
Dim sw As Stopwatch = Stopwatch.StartNew()
For i = 1 To count
Dim val As Byte = CType(obj, Byte)
Next
sw.Stop()
Console.WriteLine("{0}, {1,10}, {2}", "compute_CType_Byte", sw.ElapsedMilliseconds, "ms")
End Sub

Sub compute_DirectCast_Byte(ByVal count As Integer)
Dim obj As Object = CType(0, Byte)
Dim sw As Stopwatch = Stopwatch.StartNew()
For i = 1 To count
Dim val As Byte = DirectCast(obj, Byte)
Next
sw.Stop()
Console.WriteLine("{0}, {1,10}, {2}", "compute_DirectCast_Byte", sw.ElapsedMilliseconds, "ms")
End Sub

End Module
-----


▽実験結果(Debug構成(プラットフォームAny(たぶんx86))コンパでの実行)

-----

compute_CType_Byte, 3821, ms
compute_DirectCast_Byte, 416, ms
compute_CType_Byte, 3447, ms
compute_DirectCast_Byte, 438, ms
compute_CType_Byte, 3511, ms
compute_DirectCast_Byte, 410, ms
compute_DirectCast_Byte, 394, ms
compute_CType_Byte, 3404, ms
compute_DirectCast_Byte, 397, ms
compute_CType_Byte, 3410, ms
compute_CType_Byte, 3407, ms
compute_DirectCast_Byte, 395, ms
compute_CType_Byte, 3412, ms
compute_CType_Byte, 3414, ms
compute_DirectCast_Byte, 394, ms
compute_DirectCast_Byte, 406, ms

-----


▽実験結果(Release構成(プラットフォームAny(たぶんx86))コンパでの実行)

-----

compute_CType_Byte, 3886, ms
compute_DirectCast_Byte, 143, ms
compute_CType_Byte, 3875, ms
compute_DirectCast_Byte, 139, ms
compute_CType_Byte, 3852, ms
compute_DirectCast_Byte, 136, ms
compute_DirectCast_Byte, 136, ms
compute_CType_Byte, 4124, ms
compute_DirectCast_Byte, 145, ms
compute_CType_Byte, 3419, ms
compute_CType_Byte, 3673, ms
compute_DirectCast_Byte, 138, ms
compute_CType_Byte, 3212, ms
compute_CType_Byte, 3227, ms
compute_DirectCast_Byte, 139, ms
compute_DirectCast_Byte, 139, ms

-----


Integer型と似たような感じですが、Integer型のDirectCastとByte型のDirectCastの実行時間を比較してみると、Byte型の方が速い気がします、ちょっとだけ、たぶん気のせいかも。


ということで、DirectCastはたぶん速い。


完。