|
|
@ -72,7 +72,7 @@ internal class BatchStreamWriter : IDisposable |
|
|
var size = Unsafe.SizeOf<T>(); |
|
|
var size = Unsafe.SizeOf<T>(); |
|
|
if (_currentDataSegment.Data == IntPtr.Zero || _currentDataSegment.ElementCount + size > _memoryPool.BufferSize) |
|
|
if (_currentDataSegment.Data == IntPtr.Zero || _currentDataSegment.ElementCount + size > _memoryPool.BufferSize) |
|
|
NextDataSegment(); |
|
|
NextDataSegment(); |
|
|
*(T*)((byte*)_currentDataSegment.Data + _currentDataSegment.ElementCount) = item; |
|
|
Unsafe.WriteUnaligned<T>((byte*)_currentDataSegment.Data + _currentDataSegment.ElementCount, item); |
|
|
_currentDataSegment.ElementCount += size; |
|
|
_currentDataSegment.ElementCount += size; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -123,7 +123,7 @@ internal class BatchStreamReader : IDisposable |
|
|
if (_memoryOffset + size > _currentDataSegment.ElementCount) |
|
|
if (_memoryOffset + size > _currentDataSegment.ElementCount) |
|
|
throw new InvalidOperationException("Attempted to read more memory then left in the current segment"); |
|
|
throw new InvalidOperationException("Attempted to read more memory then left in the current segment"); |
|
|
|
|
|
|
|
|
var rv = *(T*)((byte*)_currentDataSegment.Data + _memoryOffset); |
|
|
var rv = Unsafe.ReadUnaligned<T>((byte*)_currentDataSegment.Data + _memoryOffset); |
|
|
_memoryOffset += size; |
|
|
_memoryOffset += size; |
|
|
if (_memoryOffset == _currentDataSegment.ElementCount) |
|
|
if (_memoryOffset == _currentDataSegment.ElementCount) |
|
|
{ |
|
|
{ |
|
|
@ -181,4 +181,4 @@ internal class BatchStreamReader : IDisposable |
|
|
while (_input.Objects.Count > 0) |
|
|
while (_input.Objects.Count > 0) |
|
|
_objectPool.Return(_input.Objects.Dequeue().Data); |
|
|
_objectPool.Return(_input.Objects.Dequeue().Data); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|