CodeQL 文档

循环中创建 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

点击查看 CodeQL 代码库中的查询

在循环体中创建 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);
    }
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私