循环中创建 StringBuilder¶
ID: cs/stringbuilder-creation-in-loop
Kind: problem
Security severity:
Severity: recommendation
Precision: very-high
Tags:
- efficiency
Query suites:
- csharp-security-and-quality.qls
在循环体中创建 StringBuilder
效率低下。更高效的做法是在循环之前创建 StringBuilder
,并在每次迭代中重复使用同一个实例。使用 Clear
方法重置 StringBuilder
,这会重复使用其内部缓冲区,效率更高。这在性能至关重要的代码中尤为重要。
建议¶
在循环之前创建 StringBuilder
,并在循环中调用 Clear
方法来清除内部缓冲区。
示例¶
以下示例在循环体中创建了一个新的 StringBuilder
。
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);
}
}
代码已重写,以便对循环的每次迭代使用相同的 StringBuilder
。
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);
}
}
参考¶
MSDN:StringBuilder。