中年システムエンジニアのオモチャ箱

中年システムエンジニアが初体験のブログ活動。技術情報の備忘録以外も、色々と載せていければと思います。

【スポンサーリンク】


VB.NET キャストの速度比較


【スポンサーリンク】


キャスト(型変換)って、方法は色々とありますが速度を気にしたことはありますか?
今回は文字列から数値に変換する場合に使用するキャストと、数値から文字列に変換する場合に使用するキャストの速度比較をおこないたいと思います。

 

文字列から数値に変換

下記 2 とおりのキャスト方法について速度比較をおこないます。

  1. Integer.Parse
  2. CInt

処理速度に明確な差を出すため、1,000 万回のループでキャストを実行しています。
また、変換文字列は「123」としていますが、深い意味はありません。

 

ソースコード

Private Sub CastStrToInt()

    Dim intTemp As Integer

 

    'Integer.Parse 変換

    Dim tc1 As Integer = System.Environment.TickCount

    For i As Integer = 1 To 10000000

        intTemp = Integer.Parse("123")

    Next

 

    '計測時間を算出してミリ秒で表示

    tc1 = System.Environment.TickCount - tc1

    Debug.Print("Integer.Parse で計測: {0}ミリ秒", tc1)

 

    'CInt 変換

    Dim tc2 As Integer = System.Environment.TickCount

    For i As Integer = 1 To 10000000

        intTemp = CInt("123")

    Next

 

    '計測時間を算出してミリ秒で表示

    tc2 = System.Environment.TickCount - tc2

    Debug.Print("CInt で計測: {0}ミリ秒", tc2)

Ennd Sub

 

実測結果は、

  • Integer.Parse で計測: 20757 ミリ秒
  • CInt で計測: 31405 ミリ秒

 でした。

 

CInt の方が Integer.Parse よりも、約 1.5 倍遅いことがわかりました。
文字列から数値に変換する場合は、Integer.Parse の方をおすすめします!

 

 
数値から文字列に変換

下記 2 とおりのキャスト方法について速度比較をおこないます。

  1. ToString
  2. CStr

処理速度に明確な差を出すため、1,000 万回のループでキャストを実行しています。
また、変換文字列は「123」としていますが、深い意味はありません。

 

ソースコード

Private Sub CastIntToStr()

    Dim strTemp As String

    Dim intVal As Integer = 123

 

    'ToString 変換

    Dim tc1 As Integer = System.Environment.TickCount

    For i As Integer = 1 To 10000000

        strTemp = intVal.ToString()

    Next

 

    '計測時間を算出してミリ秒で表示

    tc1 = System.Environment.TickCount - tc1

    Debug.Print("ToString で計測: {0}ミリ秒", tc1)

 

    'CStr 変換

    Dim tc2 As Integer = System.Environment.TickCount

    For i As Integer = 1 To 10000000

        strTemp = CStr(intVal)

    Next

 

    '計測時間を算出してミリ秒で表示

    tc2 = System.Environment.TickCount - tc2

    Debug.Print("CStr で計測: {0}ミリ秒", tc2)

End Sub

 

実測結果は、

  • ToString で計測: 1370 ミリ秒
  • CStr で計測: 1398 ミリ秒

でした。
ほぼ変わらないという結果となりました。
文字列から数値に変換する際に、Integer.Parse を使用するなら合わせるという意味で、ToString を使用した方がブログラムが綺麗に見える気がしますね。

 

キャストには、今回、計測した以外にも様々あります。
例えば、Convert や DirectCast 等々。
また、使用用途により何を使用するかは変わると思います。
例えば、Integer.Parse("123,456") ではエラーが発生しますが、CInt("123,456") ではエラーは発生しません。
ようは、変換する値にカンマが入っている場合、Integer.Parse ではエラーが発生しますが、CInt ではエラーは発生しません

 

使用用途にもよりますが、処理速度を気にしてプログラムを開発した方が良いかなと思います!