static void Main(string[] args) { Console.WriteLine("Is Server GC: " + GCSettings.IsServerGC); GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; Console.WriteLine("Compaction mode: " + GCSettings.LargeObjectHeapCompactionMode); Console.WriteLine("Latency mode: " + GCSettings.LatencyMode); GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency; Console.WriteLine("New Latency mode: " + GCSettings.LatencyMode); _token = _cancellationTokenSrc.Token; var ringBuffer = new ByteRingBuffer(_token); const int mod = 37; var producerBuffer = new byte[256]; for (int j = 0; j < producerBuffer.Length; j++) { producerBuffer[j] = (byte)(j % mod); } ulong iterations = 50000000L; ulong totalExpected = (ulong)(iterations * (ulong)producerBuffer.Length); var watch = Stopwatch.StartNew(); var producerTask = Task.Factory.StartNew(() => { ulong totalWritten = 0L; for (ulong i = 0L; i < iterations; i += 1) { ringBuffer.Write(producerBuffer, 0, producerBuffer.Length); totalWritten += (ulong)producerBuffer.Length; } Console.WriteLine("Done: written " + totalWritten); }); var temp = new byte[2048]; var consumerTask = Task.Factory.StartNew(() => { ulong totalRead = 0L; while (true) { var read = ringBuffer.Read(temp, 0, temp.Length); totalRead += (ulong)read; if (totalRead == totalExpected) { break; } } Console.WriteLine("Done too. Read " + totalRead); }); Task.WaitAll(producerTask, consumerTask); Console.WriteLine("Completed in " + watch.Elapsed.TotalMilliseconds + "ms"); }
public SocketConsumer(Socket socket, ByteRingBuffer ringBuffer, CancellationToken cancellationToken, int index) { _socket = socket; _ringBuffer = ringBuffer; _cancellationToken = cancellationToken; ThreadFactory.CreateBackgroundThread(WriteSocketFromRingBuffer, "SocketConsumer_" + index); }
public SocketProducer(Socket socket, ByteRingBuffer ringBuffer, CancellationToken cancellationToken, int index) { _socket = socket; _ringBuffer = ringBuffer; _cancellationToken = cancellationToken; ThreadFactory.CreateBackgroundThread(ReadSocketIntoRingBuffer, "SocketProducer_" + index); }
public SocketProducer(Socket socket, ByteRingBuffer ringBuffer, CancellationToken cancellationToken, int index) { _socket = socket; _ringBuffer = ringBuffer; _cancellationToken = cancellationToken; ThreadFactory.BackgroundThread(ReadSocketIntoRingBuffer, "SocketProducer_" + index); }
public RingBufferStreamReadBarrier(RingBufferStreamAdapter innerStream, int length) { _ringBuffer = innerStream._ringBuffer; if (!_ringBuffer.TryAddReadingGate((uint)length, out _gate)) { Console.WriteLine("Could not add reading gate?"); throw new InvalidOperationException("Could not add reading gate?"); } _length = length; }
public RingBufferStreamAdapter(ByteRingBuffer ringBuffer) { _ringBuffer = ringBuffer; }
internal RingBufferStreamAdapter(ByteRingBuffer ringBuffer) { _ringBuffer = ringBuffer; }
public RingBufferStreamReadBarrier(RingBufferStreamAdapter innerStream, int length) { _ringBuffer = innerStream._ringBuffer; // _length = length; _gate = _ringBuffer.AddReadingGate((uint)length); }