什么表现更好? .Split一次或多次?

时间:2017-12-03 14:43:58

标签: c#

那么,性能更好的是什么?

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];

我真的不确定,因此问题。

1 个答案:

答案 0 :(得分:3)

你甚至可以在没有测试的情况下知道答案,因为重新调用一个方法在逻辑上是“慢”#34;比调用一次并使用结果(这是正确的用法)。

无论如何,我写了一些代码来给你一个技术答案。

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结果,您可以看到差异。