public SocketAsyncPool(int bufferSize, int maxCount)
{
m_bufferSize = bufferSize;
//Allocate and pin memory pool
m_buffer = new byte[maxCount * bufferSize];
m_bufferHandle = GCHandle.Alloc(m_buffer, GCHandleType.Pinned);
m_eventArgs = new SocketAsyncEventArgs[maxCount];
m_freeObjects = new ConcurrentQueue<int>();
//Setup all context objects with their buffers
for (int i = 0; i < maxCount; i++)
{
m_eventArgs[i] = new SocketAsyncEventArgs();
m_eventArgs[i].UserToken = i;
m_eventArgs[i].SetBuffer(m_buffer, i*bufferSize, bufferSize);
m_freeObjects.Enqueue(i);
}
}