メソッドを再呼び出しすると、一度呼び出すと結果が正しく使用されるよりも、メソッドを論理的に「遅くする」ため、テストなしで答えを知ることができます。
とにかく、私はあなたに技術的な答えを与えるために少しのコードを書いた。
static void PerformAction(string name, int n, Action action)
{
// Warm up
action();
List<double> times = new List<double>();
for (int i = 0; i < n; i++)
{
var sw = Stopwatch.StartNew();
action();
times.Add(sw.Elapsed.TotalMilliseconds);
}
Console.WriteLine("{0}: MIN: {1}, AVG: {2}, MAX: {3}", name, times.Min(), times.Average(), times.Max());
}
テスト:
var wholeStr = "Hello, I am\n a Cat.\n You like cats?";
PerformAction("Multiple splits", 10000,() =>
{
var str1 = wholeStr.Split('\n')[0];
var str2 = wholeStr.Split('\n')[1];
var str3 = wholeStr.Split('\n')[2];
});
PerformAction("Single split", 10000,() =>
{
var strArray = wholeStr.Split('\n');
var str1 = strArray[0];
var str2 = strArray[1];
var str3 = strArray[2];
});
結果:
Multiple splits: MIN: 0, AVG: 0,000537730000000083, MAX: 0,3103
Single split: MIN: 0, AVG: 0,000163129999999993, MAX: 0,4506
あなたはAVGの結果に差おかげで見ることができます。
[this](https://www.google.co.uk/amp/s/ericlippert.com/2012/12/17/performance-rant/amp/)を参照してください。しかし、あなたのケースでは、それは間違いなくBです。 –
操作を一度行うのが速いのか、それとも三回するのではないのですか? –
あなたはどちらがもっと仕事をしなければならないと思いますか?しかし、コンパイラを書く人が時にはいくつかのことをするより速い方法を知っていることがあるため、(リリース版として)それを測定することしか伝えられません。 –