StringBuilder creation in loop¶
ID: cs/stringbuilder-creation-in-loop Kind: problem Security severity: Severity: recommendation Precision: very-high Tags: - quality - reliability - performance Query suites: - csharp-code-quality.qls - csharp-security-and-quality.qls Click to see the query in the CodeQL repository
Creating a StringBuilder in the body of a loop is inefficient. It is more efficient to create the StringBuilder before the loop and reuse the same instance for each iteration. Use the Clear method to reset the StringBuilder, which reuses its internal buffer and is more efficient. This is particularly important in performance-critical code.
Recommendation¶
Create the StringBuilder before the loop, and call the Clear method within the loop to clear the internal buffer.
Example¶
The following example creates a new StringBuilder in the body of the loop.
static void Main(string[] args) { foreach (var arg in args) { var sb = new StringBuilder(); // BAD: Creation in loop sb.Append("Hello ").Append(arg); Console.WriteLine(sb); } } The code has been rewritten so that the same StringBuilder is used for every iteration of the loop.
static void Main(string[] args) { var sb = new StringBuilder(); // GOOD: Creation outside loop foreach (var arg in args) { sb.Clear(); sb.Append("Hello ").Append(arg); Console.WriteLine(sb); } } References¶
MSDN: StringBuilder.