Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        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()));
                }
        }
Exemplo n.º 3
0
        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()));
                }
        }
Exemplo n.º 4
0
 static void PrintInfo <T>(NativePool <T> pool) where T : NativeObject
 {
     Console.WriteLine($"full: {pool.IsFull}; numObjs: {pool.NumObjects}");
 }
Exemplo n.º 5
0
 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()));
     }
 }