internal PooledSegment(int index, RIOBufferPool owningPool, RIO_BUFSEGMENT segment, byte[] buffer) { PoolIndex = index; _owningPool = owningPool; RioBuffer = segment; Buffer = buffer; }
public void Initalize() { var pinnedBuffer = GCHandle.Alloc(_underlyingBuffer, GCHandleType.Pinned); var address = Marshal.UnsafeAddrOfPinnedArrayElement(_underlyingBuffer, 0); var bufferId = _rio.RegisterBuffer(address, BufferLength); _allocatedBuffers.Enqueue(new AllocatedBuffer() { Buffer = _underlyingBuffer, PinnedBuffer = pinnedBuffer, BufferId = bufferId }); _segments = new RIO_BUFSEGMENT[PerAllocationCount]; _availableSegments = new ConcurrentQueue<int>(); var offset = 0u; for (var i = 0; i < _segments.Length; i++) { _segments[i] = new RIO_BUFSEGMENT(bufferId, offset, PacketSize); _availableSegments.Enqueue(i); offset += PacketSize; } }
public void Initalize() { var pinnedBuffer = GCHandle.Alloc(_underlyingBuffer, GCHandleType.Pinned); var address = Marshal.UnsafeAddrOfPinnedArrayElement(_underlyingBuffer, 0); var bufferId = _rio.RegisterBuffer(address, BufferLength); _allocatedBuffers.Enqueue(new AllocatedBuffer() { Buffer = _underlyingBuffer, PinnedBuffer = pinnedBuffer, BufferId = bufferId }); _segments = new RIO_BUFSEGMENT[PerAllocationCount]; _availableSegments = new ConcurrentQueue <int>(); var offset = 0u; for (var i = 0; i < _segments.Length; i++) { _segments[i] = new RIO_BUFSEGMENT(bufferId, offset, PacketSize); _availableSegments.Enqueue(i); offset += PacketSize; } }