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-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.