2017-12-03 6 views
-4

したがって、パフォーマンス面では何が良いでしょうか?パフォーマンスが向上していますか? 。1回または複数回に分割する?

var wholeStr = "Hello, I am\n a Cat.\n You like cats?; 

var str1 = wholeStr.Split('\n')[0]; 
var str2 = wholeStr.Split('\n')[1]; 
var str3 = wholeStr.Split('\n')[2]; 

または

var wholeStr = "Hello, I am\n a Cat.\n You like cats?; 
var strArray = wholeStr.Split('\n'); 
var str1 = strArray [0]; 
var str2 = strArray [1]; 
var str3 = strArray [2]; 

私は、本当にそれ故に問題を確認していません。

+4

[this](https://www.google.co.uk/amp/s/ericlippert.com/2012/12/17/performance-rant/amp/)を参照してください。しかし、あなたのケースでは、それは間違いなくBです。 –

+0

操作を一度行うのが速いのか、それとも三回するのではないのですか? –

+0

あなたはどちらがもっと仕事をしなければならないと思いますか?しかし、コンパイラを書く人が時にはいくつかのことをするより速い方法を知っていることがあるため、(リリース版として)それを測定することしか伝えられません。 –

答えて

3

メソッドを再呼び出しすると、一度呼び出すと結果が正しく使用されるよりも、メソッドを論理的に「遅くする」ため、テストなしで答えを知ることができます。

とにかく、私はあなたに技術的な答えを与えるために少しのコードを書いた。

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の結果に差おかげで見ることができます。

+0

あなたはPerformActionのコードを入れていません –

+0

興味深い、はい、他のコードも貼り付けてください。将来このメソッドを確実に使用します。 –

+0

私の悪い、PerformActionメソッドのコードが追加されました。 – Haytam

関連する問題