public class MessageReaderBenchmark
{
private byte[] _data;
- private Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader_Bytes_Pooled_Improved> _pool;
+ private ObjectPool<MessageReader_Bytes_Pooled_Improved> _pool;
[GlobalSetup]
public void Setup()
_pool = services
.BuildServiceProvider()
- .GetRequiredService<Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader_Bytes_Pooled_Improved>>();
+ .GetRequiredService<ObjectPool<MessageReader_Bytes_Pooled_Improved>>();
}
[Benchmark]
public class MessageReader : IMessageReader
{
private readonly ObjectPool<MessageReader> _pool;
+ private bool _inUse;
public byte Tag { get; private set; }
public ReadOnlyMemory<byte> Buffer { get; private set; }
public void Update(byte tag, ReadOnlyMemory<byte> buffer)
{
+ _inUse = true;
+
Tag = tag;
Buffer = buffer;
Position = 0;
internal void Reset()
{
+ _inUse = false;
+
Tag = byte.MaxValue;
Buffer = null;
Position = 0;
public void Dispose()
{
- _pool.Return(this);
+ if (_inUse)
+ {
+ _pool.Return(this);
+ }
}
}
}
public MessageReader Create()
{
- return new MessageReader(_serviceProvider.GetRequiredService<Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader>>());
+ return new MessageReader(_serviceProvider.GetRequiredService<ObjectPool<MessageReader>>());
}
public bool Return(MessageReader obj)
using System.Threading.Channels;
using System.Threading.Tasks;
using Impostor.Api.Net.Messages;
+using Microsoft.Extensions.ObjectPool;
using Serilog;
namespace Impostor.Hazel.Udp
private static readonly ILogger Logger = Log.ForContext<UdpConnection>();
private readonly ConnectionListener _listener;
- private readonly Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader> _readerPool;
+ private readonly ObjectPool<MessageReader> _readerPool;
private readonly CancellationTokenSource _stoppingCts;
private bool _isDisposing;
private bool _isFirst = true;
private Task _executingTask;
- protected UdpConnection(ConnectionListener listener, Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader> readerPool)
+ protected UdpConnection(ConnectionListener listener, ObjectPool<MessageReader> readerPool)
{
_listener = listener;
_readerPool = readerPool;