StringBuilder
類在 .NET Framework 中并不是線程安全的。如果你在多線程環境中使用 StringBuilder
,可能會遇到數據不一致和其他并發問題。
為了在多線程環境中安全地使用 StringBuilder
,你可以采取以下方法:
lock
語句確保在同一時間只有一個線程訪問 StringBuilder
實例:private readonly object _lock = new object();
private StringBuilder _stringBuilder;
public void Append(string value)
{
lock (_lock)
{
if (_stringBuilder == null)
{
_stringBuilder = new StringBuilder();
}
_stringBuilder.Append(value);
}
}
ThreadLocal<StringBuilder>
為每個線程創建一個單獨的 StringBuilder
實例:private static readonly ThreadLocal<StringBuilder> _threadLocalStringBuilder = new ThreadLocal<StringBuilder>(() => new StringBuilder());
public void Append(string value)
{
var stringBuilder = _threadLocalStringBuilder.Value;
stringBuilder.Append(value);
}
請注意,這兩種方法都有一定的性能開銷。如果你需要在多線程環境中頻繁地修改字符串,可能需要考慮使用其他線程安全的數據結構,如 System.Text.ConcurrentQueue<string>
或 System.Collections.Concurrent.ConcurrentBag<string>
。