AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.9.2" />

 Pool

static class Pool
Provides a pool of used / recycled resources.
using AngleSharp.Dom.Css; using AngleSharp.Parser.Css; using AngleSharp.Services; using System.Collections.Generic; using System.Text; namespace AngleSharp { internal static class Pool { private static readonly Stack<StringBuilder> _builder = new Stack<StringBuilder>(); private static readonly Stack<CssSelectorConstructor> _selector = new Stack<CssSelectorConstructor>(); private static readonly Stack<CssValueBuilder> _value = new Stack<CssValueBuilder>(); private static readonly object _lock = new object(); public static StringBuilder NewStringBuilder() { lock (_lock) { if (_builder.Count != 0) return _builder.Pop().Clear(); return new StringBuilder(1024); } } public static CssSelectorConstructor NewSelectorConstructor(IAttributeSelectorFactory attributeSelector, IPseudoClassSelectorFactory pseudoClassSelector, IPseudoElementSelectorFactory pseudoElementSelector) { lock (_lock) { if (_selector.Count != 0) return _selector.Pop().Reset(attributeSelector, pseudoClassSelector, pseudoElementSelector); return new CssSelectorConstructor(attributeSelector, pseudoClassSelector, pseudoElementSelector); } } public static CssValueBuilder NewValueBuilder() { lock (_lock) { if (_value.Count != 0) return _value.Pop().Reset(); return new CssValueBuilder(); } } public static string ToPool(this StringBuilder sb) { string result = sb.ToString(); lock (_lock) { _builder.Push(sb); return result; } } public static ISelector ToPool(this CssSelectorConstructor ctor) { ISelector result = ctor.GetResult(); lock (_lock) { _selector.Push(ctor); return result; } } public static CssValue ToPool(this CssValueBuilder vb) { CssValue result = vb.GetResult(); lock (_lock) { _value.Push(vb); return result; } } } }