static void Main(string[] args) { const int NumObjs = 10, Iterations = 100; using (var pool = new NativePool <TestObject>(2, 2)) { var objs = new TestObject[NumObjs]; var rand = new Random(); for (int i = 0; i < Iterations; i++) { int index = rand.Next(NumObjs); var obj = objs[index]; if (obj == null) { objs[index] = (TestObject)pool.New(); GC.Collect(); objs[index].Initialize(i); GC.Collect(); } else if (rand.Next() % 2 == 0) { objs[index].Free(); GC.Collect(); objs[index] = null; GC.Collect(); } Console.WriteLine($"iteration {i}: objs[{index}] = {objs[index]?.ToString() ?? "null"}"); PrintInfo(pool); Console.WriteLine(); GC.Collect(); } Console.WriteLine("-----"); foreach (var obj in pool) { Console.WriteLine(obj); obj.Free(); PrintInfo(pool); } } }
public async Task CopyToAsyncNativeMemory() { using (var pool = new NativePool()) using (var factory = new PipelineFactory(pool)) { var readerWriter = factory.Create(); var output = readerWriter.Alloc(); output.Append("Hello World", EncodingData.InvariantUtf8); await output.FlushAsync(); var ms = new MemoryStream(); var result = await readerWriter.ReadAsync(); var rb = result.Buffer; await rb.CopyToAsync(ms); ms.Position = 0; Assert.Equal(11, rb.Length); Assert.Equal(11, ms.Length); Assert.Equal(rb.ToArray(), ms.ToArray()); Assert.Equal("Hello World", Encoding.ASCII.GetString(ms.ToArray())); } }
public async Task CopyToAsyncNativeMemory() { using (var pool = new NativePool()) using (var cf = new ChannelFactory(pool)) { var channel = cf.CreateChannel(); var output = channel.Alloc(); output.WriteAsciiString("Hello World"); await output.FlushAsync(); var ms = new MemoryStream(); var result = await channel.ReadAsync(); var rb = result.Buffer; await rb.CopyToAsync(ms); ms.Position = 0; Assert.Equal(11, rb.Length); Assert.Equal(11, ms.Length); Assert.Equal(rb.ToArray(), ms.ToArray()); Assert.Equal("Hello World", Encoding.ASCII.GetString(ms.ToArray())); } }
static void PrintInfo <T>(NativePool <T> pool) where T : NativeObject { Console.WriteLine($"full: {pool.IsFull}; numObjs: {pool.NumObjects}"); }
public async Task CopyToAsyncNativeMemory() { using (var pool = new NativePool()) using (var factory = new PipelineFactory(pool)) { var readerWriter = factory.Create(); var output = readerWriter.Alloc(); output.Append("Hello World", TextEncoding.Utf8); await output.FlushAsync(); var ms = new MemoryStream(); var result = await readerWriter.ReadAsync(); var rb = result.Buffer; await rb.CopyToAsync(ms); ms.Position = 0; Assert.Equal(11, rb.Length); Assert.Equal(11, ms.Length); Assert.Equal(rb.ToArray(), ms.ToArray()); Assert.Equal("Hello World", Encoding.ASCII.GetString(ms.ToArray())); } }