というわけでC#編。
ソース(前回書かなかったな)
効率のいい書き方?作法?そんなん知らんがな(邪悪)。
class Program
{
static void Main(string[] args)
{
using (StreamWriter sw = new StreamWriter(@"D:\test.txt", true, System.Text.Encoding.Unicode))
{
Console.SetOut(sw);
string s = string.Empty;
var result = new List<TimeSpan>();
var tryCounter = Enumerable.Range(1, 10).ToList();
var roopCounter = Enumerable.Range(0, 10000000).ToList();
Console.WriteLine(@"""""での判定");
result.Clear();
tryCounter.ForEach(i =>
{
Console.Write(i + "回目:");
Console.WriteLine(
RunText(() =>
{
roopCounter.ForEach(r =>
{
if (s == "") { };
});
}));
});
Console.WriteLine(@"String.Emptyでの判定");
result.Clear();
tryCounter.ForEach(i =>
{
Console.Write(i + "回目:");
Console.WriteLine(
RunText(() =>
{
roopCounter.ForEach(r =>
{
if (s == string.Empty) { };
});
}));
});
Console.WriteLine(@"String.IsNullorEmptyでの判定");
result.Clear();
tryCounter.ForEach(i =>
{
Console.Write(i + "回目:");
Console.WriteLine(
RunText(() =>
{
roopCounter.ForEach(r =>
{
if (string.IsNullOrEmpty(s)) { };
});
}));
});
Console.WriteLine(@"Lengthでの判定");
result.Clear();
tryCounter.ForEach(i =>
{
Console.Write(i + "回目:");
Console.WriteLine(
RunText(() =>
{
roopCounter.ForEach(r =>
{
if (s.Length == 0) { };
});
}));
});
Console.WriteLine(@"""""とequlsでの判定");
result.Clear();
tryCounter.ForEach(i =>
{
Console.Write(i + "回目:");
Console.WriteLine(
RunText(() =>
{
roopCounter.ForEach(r =>
{
if (s.Equals("")) { };
});
}));
});
sw.Close();
}
}
static TimeSpan RunText(Action a)
{
var t = DateTime.Now;
a();
return DateTime.Now - t;
}
}
結果
""での判定
1回目:00:00:00.1810066
2回目:00:00:00.1560072
3回目:00:00:00.1440069
4回目:00:00:00.1290084
5回目:00:00:00.1630423
6回目:00:00:00.1779770
7回目:00:00:00.1580394
8回目:00:00:00.1800101
9回目:00:00:00.1579818
10回目:00:00:00.1810102
String.Emptyでの判定
1回目:00:00:00.1690038
2回目:00:00:00.1430068
3回目:00:00:00.1370051
4回目:00:00:00.1190062
5回目:00:00:00.1190067
6回目:00:00:00.1090028
7回目:00:00:00.1030062
8回目:00:00:00.1020050
9回目:00:00:00.0900034
10回目:00:00:00.0890046
String.IsNullorEmptyでの判定
1回目:00:00:00.0770039
2回目:00:00:00.0740020
3回目:00:00:00.0680047
4回目:00:00:00.0670034
5回目:00:00:00.0720012
6回目:00:00:00.0670210
7回目:00:00:00.0619853
8回目:00:00:00.0610202
9回目:00:00:00.0610032
10回目:00:00:00.0600027
Lengthでの判定
1回目:00:00:00.0510044
2回目:00:00:00.0469995
3回目:00:00:00.0460022
4回目:00:00:00.0460020
5回目:00:00:00.0460034
6回目:00:00:00.0460022
7回目:00:00:00.0460020
8回目:00:00:00.0460016
9回目:00:00:00.0420017
10回目:00:00:00.0420029
""とequlsでの判定
1回目:00:00:00.0640032
2回目:00:00:00.0640030
3回目:00:00:00.0630028
4回目:00:00:00.0590029
5回目:00:00:00.0590028
6回目:00:00:00.0580030
7回目:00:00:00.0590032
8回目:00:00:00.0580030
9回目:00:00:00.0560021
10回目:00:00:00.0540025
総括
おおむねこの通りでした。
とりあえず「文字列 == 空」のような書き方はアカンということが分かった。
DelphiとC#は、開発者レベルで似ている(というか同……ゲフンゲフン)ですけど、結果が大分違うのが面白いですね。
※注意!
私の開発環境での結果です。
ロジックや書き方、環境によってなんぼでも結果は変わることをお断りしておきます。