String output: 在C#中使用format或concat?
String output: 在C#中使用format或concat?
假设你想要输出或连接字符串。你更喜欢以下哪种方式?
var p = new { FirstName = "Bill", LastName = "Gates" };
Console.WriteLine("{0} {1}", p.FirstName, p.LastName);
Console.WriteLine(p.FirstName + " " + p.LastName);
你更喜欢使用格式化还是简单地连接字符串?你有什么偏好吗?其中一种方式让你感到不舒服吗?
你有任何理性的理由来使用其中一种方式而不是另一种方式吗?
我会选择第二种方式。
在这段内容中,有人讨论了在C#中使用哪种方法来格式化或连接字符串的问题。有人认为使用String.Format
是从架构角度来看最合理的选择。他们认为,只有当性能成为问题时,才需要考虑性能。另外,使用String.Format
可以轻松地更改格式字符串,而使用连接则需要额外的代码。他们还提到,在进行大量字符串生成的网页开发环境中,减少字符串生成代码评估的时间可以带来巨大的优势,因为这些代码可能会在一个页面加载中被调用数万次。
然而,也有人认为性能是一个重要因素。他们指出,如果网站上有数百万的用户,并且每个用户的请求都会产生成本,那么性能就变得非常重要。还有人认为,找到最佳方法可以节省大量的时间和精力,并避免事后的烦恼。
这个问题的出现是因为人们对于性能和架构之间的权衡存在不同的看法。解决这个问题的方法是要根据具体情况来决定使用哪种方法,并权衡性能和架构的因素。
问题:在C#中,应该使用哪种方式来格式化字符串,是使用string.Format还是使用字符串拼接(concat)?
原因:这个问题的出现是因为有人对使用string.Format和字符串拼接(concat)两种方式来格式化字符串的速度进行了比较,并且发现字符串拼接(concat)的速度要快于string.Format。
解决方法:根据测试结果,可以选择使用字符串拼接(concat)的方式来格式化字符串,因为它的速度更快。下面是测试的代码和结果:
Stopwatch s = new Stopwatch(); var p = new { FirstName = "Bill", LastName = "Gates" }; int n = 1000000; long fElapsedMilliseconds = 0, fElapsedTicks = 0, cElapsedMilliseconds = 0, cElapsedTicks = 0; string result; s.Start(); for (var i = 0; i < n; i++) result = (p.FirstName + " " + p.LastName); s.Stop(); cElapsedMilliseconds = s.ElapsedMilliseconds; cElapsedTicks = s.ElapsedTicks; s.Reset(); s.Start(); for (var i = 0; i < n; i++) result = string.Format("{0} {1}", p.FirstName, p.LastName); s.Stop(); fElapsedMilliseconds = s.ElapsedMilliseconds; fElapsedTicks = s.ElapsedTicks; s.Reset(); Console.Clear(); Console.WriteLine(n.ToString() + " x result = string.Format(\"{0} {1}\", p.FirstName, p.LastName); took: " + (fElapsedMilliseconds) + "ms - " + (fElapsedTicks) + " ticks"); Console.WriteLine(n.ToString() + " x result = (p.FirstName + \" \" + p.LastName); took: " + (cElapsedMilliseconds) + "ms - " + (cElapsedTicks) + " ticks"); Thread.Sleep(4000);
测试结果:
1000000 x result = string.Format("{0} {1}", p.FirstName, p.LastName); took: 618ms - 2213706 ticks 1000000 x result = (p.FirstName + " " + p.LastName); took: 166ms - 595610 ticks
根据测试结果,使用字符串拼接(concat)的方式来格式化字符串的速度要比使用string.Format的方式快。因此,在只考虑速度的情况下,可以选择使用字符串拼接(concat)的方式。
在这段代码中,作者测试了不同方式的字符串拼接和格式化输出的性能。作者发现,第一个操作的执行时间总是更长,而后续执行相同操作的时间逐渐减少。
作者尝试了不同的操作顺序,发现在执行拼接操作后再执行格式化输出操作的时间更短。作者还尝试了多次执行同样的操作,发现后续执行的时间更短。
作者推测,启动时的初始延迟可能是由于初始化控制台流的原因,因为在第一个操作之前添加了一行代码Console.Writeline("Start!")后,所有操作的执行时间都回归正常。
最后,作者建议在性能测试时移除控制台输出的代码,因为它会影响结果的准确性。
根据作者的测试结果,执行Console.WriteLine(String.Concat(...))的方式是最快的,其次是普通的字符串拼接,最慢的是格式化操作。
为了准确测试性能,作者建议在运行性能测试时先执行一个无关紧要的操作,以确保后续操作的执行时间稳定。
作者测试了字符串拼接和格式化输出的性能,并发现执行顺序和初始延迟会对性能产生影响。作者还提出了一些建议,以确保性能测试的准确性。