字符串到大写的第一个字符:服务器的成本更高? C#

时间:2014-10-08 23:10:54

标签: c# string uppercase

我有两种方法可以将字符串的第一个字母设置为大写字母,但我想知道哪一个使用更多的服务器资源? (MVC 5,C#)

string test1 = test.ToUpper()[0] + test.Substring(1);

string test1 = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());

3 个答案:

答案 0 :(得分:5)

将此添加到ExtensionMethods.cs

public static class ExtensionMethods
{
    public static string UppercaseFirstLetter(this string value)
    {
       //
       // Uppercase the first letter in the string this extension is called on.
       //
       if (value.Length > 0)
       {
           char[] array = value.ToCharArray();
           array[0] = char.ToUpper(array[0]);
           return new string(array);
       }
       return value;
    }
}

根据:http://www.dotnetperls.com/uppercase-first-letter它比第一个方法快,因为它只在return语句中分配一个新字符串。第一种方法分配两个字符串:Substring(1),然后是一个带string.Concat的新字符串。

答案 1 :(得分:2)

我制作了一个dotnetfiddle来测试你提到的两种方法的性能,以及SatuDuaTiga建议的方法。

https://dotnetfiddle.net/VyNjht

SatuDuaTiga建议的方法似乎比第一种方法略胜一筹,但在CultureInfo命名空间中使用.ToTitleCase()是最差的。

多次运行的平均结果:

  • 方法1:93673滴答
  • 方法2:260491 ticks
  • 方法3:90649滴答

你可以反汇编TextInfo类并查看.ToTitleCase()方法的来源,你会看到它正在做很多事情。

答案 2 :(得分:1)

我做了一个小的基准测试来检查它,并且两种方法之间没有这种可观察到的差异。您可以使用以下代码在您的最后执行相同的操作。尝试按照以下评论中@ ta.speot.is的建议多次运行它。

    static void Main(string[] args)
    {
        for (int i = 0; i < 5; i++)
        {
            Benchmark();
            Console.WriteLine();
        }
    }

    static void Benchmark()
    {
        string test = "rahul";
        Stopwatch watch = Stopwatch.StartNew();
        string test1 = test.ToUpper()[0] + test.Substring(1);
        watch.Stop();
        Console.WriteLine(watch.ElapsedTicks);

        watch.Restart();
        string test2 = 
             CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());
        watch.Stop();
        Console.WriteLine(watch.ElapsedTicks);
    }

如果你多次运行它,看起来第一次接近它比第二次快。我尝试了5次以下结果

4
5

2
4

2
3

2
3