検証内容
文字列の一致についてどれが一番早いかを比較。
調査する種類は、以下の3つとする
- String.CompareTo
- ==演算子
- String.Compare
検証コード
static void StringCompare()
{
var count = 100000;
var ret = false;
var inputStr1 = "aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789";
var inputStr2 = "abCdEfGhIjKlMnOpQrStUvWxYz0123456789";
Console.WriteLine("---------------------------------");
Console.WriteLine($"ループ回数:{count:d}");
//-----------------------------------------------------------------
var time = Stopwatch.StartNew();
for (var i = 0; i < count; i++)
{
ret = inputStr1.ToLower().CompareTo(inputStr2.ToLower()) ==0;
}
time.Stop();
Console.WriteLine($"CompareTo : {time.ElapsedMilliseconds}ms");
//-----------------------------------------------------------------
time.Restart();
for (var i = 0; i < count; i++)
{
ret = (inputStr1.ToLower() == inputStr2.ToLower());
}
time.Stop();
Console.WriteLine($"== : {time.ElapsedMilliseconds}ms");
//-----------------------------------------------------------------
time.Restart();
for (var i = 0; i < count; i++)
{
ret = String.Compare(inputStr1 ,inputStr2,true) == 0;
}
time.Stop();
Console.WriteLine($"String.Compare : {time.ElapsedMilliseconds}ms");
}
結果
---------------------------------
ループ回数:100000
CompareTo : 108ms
== : 74ms
String.Compare : 104ms
---------------------------------
ループ回数:100000
CompareTo : 112ms
== : 61ms
String.Compare : 79ms
---------------------------------
ループ回数:100000
CompareTo : 88ms
== : 47ms
String.Compare : 77ms
---------------------------------
ループ回数:100000
CompareTo : 105ms
== : 61ms
String.Compare : 81ms
---------------------------------
ループ回数:100000
CompareTo : 103ms
== : 45ms
String.Compare : 99ms
結論
==演算子が速い!!
でも、10万回も回しての数十msなら、どちらでもよいかも。
っていうか、こちらについても相当シビアな環境じゃなきゃ影響なし。