型変換は何を使う?(値型⇒String型)
今回は値型⇔string型です。共通認識は前回と一緒です。
- VB.NETのCIntやCDecなどのC●●●は、CTypeと等価なので全てCTypeで検証
- 時間計測はSystem.Diagnostics名前空間のStopwatchクラスを利用
- 繰り返し回数maxは10,000,000回とする
- それぞれを3回ずつ実行する
今回考えられる候補は、ToString、Convert、CType(VB.NETのみ)です。
int a = 123456789; sw.Start(); for (int i = 1; i <= max; ++i) { string res = a.ToString(); } sw.Stop(); Console.WriteLine(sw.Elapsed.ToString() + " ToString"); sw.Reset(); sw.Start(); for (int i = 1; i <= max; ++i) { string res = Convert.ToString(a); } sw.Stop(); Console.WriteLine(sw.Elapsed.ToString() + " Convert"); sw.Reset();
Dim a As Integer = 123456789 sw.Start() For i As Integer = 1 To max Dim res As String = a.ToString() Next sw.Stop() Console.WriteLine(sw.Elapsed.ToString() & " ToString") sw.Reset() sw.Start() For i As Integer = 1 To max Dim res As String = Convert.ToString(a) Next sw.Stop() Console.WriteLine(sw.Elapsed.ToString() & " Convert") sw.Reset() sw.Start() For i As Integer = 1 To max Dim res As String = CType(a, String) Next sw.Stop() Console.WriteLine(sw.Elapsed.ToString() & " CType") sw.Reset()
結果は以下の通りです。
項目 | C# |
VB.NET |
ToString | 00:00:02.7788599 00:00:01.9934980 00:00:02.7895854 |
00:00:02.7907917 00:00:02.6248466 00:00:02.7211354 |
Convert | 00:00:02.1907958 00:00:01.9914505 00:00:02.0879492 |
00:00:02.0197473 00:00:02.1154300 00:00:02.1438101 |
CType | × | 00:00:01.5729566 00:00:02.0180006 00:00:02.0006762 |
以外な結果です。最速はVB.NETのCType(CStr)でした。それでもToString、Convertと大差ありません。ToStringは書式指定が可能ですね。あとはnullの処理をどうするかだけかと思います。
結論、値型⇒String型はToStringで良いでしょう。