Files
2026-08-27 10:56:38 -06:00

49 lines
893 B
C#

using System;
using System.Reflection.Metadata;
using Microsoft.CodeAnalysis.PooledObjects;
namespace Microsoft.Cci;
internal sealed class PooledBlobBuilder : BlobBuilder, IDisposable
{
private const int PoolSize = 128;
private const int ChunkSize = 1024;
private static readonly ObjectPool<PooledBlobBuilder> s_chunkPool = new ObjectPool<PooledBlobBuilder>(() => new PooledBlobBuilder(1024), 128);
private PooledBlobBuilder(int size)
: base(size)
{
}
public static PooledBlobBuilder GetInstance()
{
return s_chunkPool.Allocate();
}
protected override BlobBuilder AllocateChunk(int minimalSize)
{
if (minimalSize <= 1024)
{
return s_chunkPool.Allocate();
}
return new BlobBuilder(minimalSize);
}
protected override void FreeChunk()
{
s_chunkPool.Free(this);
}
public new void Free()
{
base.Free();
}
void IDisposable.Dispose()
{
Free();
}
}