Files
zszq-trs/Framework/YLErp.Core/Commons/StringBuilderPool.cs
T
2024-05-09 14:06:26 +08:00

54 lines
1.3 KiB
C#

using System.Collections.Concurrent;
using System.Text;
namespace YLErp.Commons
{
/// <summary>
/// StringBuilder对象池
/// </summary>
public static class StringBuilderPool
{
static readonly ConcurrentQueue<StringBuilder> _Pool;
static StringBuilderPool()
{
_Pool = new ConcurrentQueue<StringBuilder>();
}
static int _Max = 100;
/// <summary>
/// 对象池最大数量
/// </summary>
public static int MaxPoolCount
{
get { return _Max; }
set { _Max = value < 10 ? 10 : value; }
}
/// <summary>
/// 请求一个StringBuilder对象
/// </summary>
public static StringBuilder Acquire()
{
return _Pool.TryDequeue(out var sb) ? sb : new StringBuilder();
}
/// <summary>
/// 释放StringBuilder对象到对象池中并返回StringBuilder中的值
/// </summary>
/// <param name="sb"></param>
/// <returns></returns>
public static string Release(this StringBuilder sb)
{
var str = sb.ToString();
if (_Pool.Count < _Max && sb.Length < 300)
{
sb.Clear();
_Pool.Enqueue(sb);
}
return str;
}
}
}