The first will be more efficient. The compiler will convert it to the following single call:
StringBuilder sb = new StringBuilder(); sb.Append("HelloHowareyou");
Measuring the performance
The best way to know which is faster is to measure it. I'll get straight to the point: here are the results (smaller times means faster):
sb.Append("Hello" + "How" + "are" + "you") : 11.428s sb.Append("Hello").Append("How").Append("are").Append("you"): 15.314s sb.Append(a + b + c + d) : 21.970s sb.Append(a).Append(b).Append(c).Append(d) : 15.529s
The number given is the number of seconds to perform the operation 100 million times in a tight loop.
Conclusions
- The fastest is using string literals and
+. - But if you have variables, using
Append is faster than +. The first version is slower because of an extra call to String.Concat.
In case you want to test this yourself, here's the program I used to get the above timings:
using System; using System.Text; public class Program { public static void Main() { DateTime start, end; int numberOfIterations = 100000000; start = DateTime.UtcNow; for (int i = 0; i < numberOfIterations; ++i) { StringBuilder sb = new StringBuilder(); sb.Append("Hello" + "How" + "are" + "you"); } end = DateTime.UtcNow; DisplayResult("sb.Append(\"Hello\" + \"How\" + \"are\" + \"you\")", start, end); start = DateTime.UtcNow; for (int i = 0; i < numberOfIterations; ++i) { StringBuilder sb = new StringBuilder(); sb.Append("Hello").Append("How").Append("are").Append("you"); } end = DateTime.UtcNow; DisplayResult("sb.Append(\"Hello\").Append(\"How\").Append(\"are\").Append(\"you\")", start, end); string a = "Hello"; string b = "How"; string c = "are"; string d = "you"; start = DateTime.UtcNow; for (int i = 0; i < numberOfIterations; ++i) { StringBuilder sb = new StringBuilder(); sb.Append(a + b + c + d); } end = DateTime.UtcNow; DisplayResult("sb.Append(a + b + c + d)", start, end); start = DateTime.UtcNow; for (int i = 0; i < numberOfIterations; ++i) { StringBuilder sb = new StringBuilder(); sb.Append(a).Append(b).Append(c).Append(d); } end = DateTime.UtcNow; DisplayResult("sb.Append(a).Append(b).Append(c).Append(d)", start, end); Console.ReadLine(); } private static void DisplayResult(string name, DateTime start, DateTime end) { Console.WriteLine("{0,-60}: {1,6:0.000}s", name, (end - start).TotalSeconds); } }