public unsafe void LogBufferTest() { var sw = new Stopwatch(); LogBuffer l1 = new LogBuffer("../LogBufferTest", 100); LogBuffer l2 = new LogBuffer("../LogBufferTest", 100); var tcs = new TaskCompletionSource <int>(); var tcs2 = new TaskCompletionSource <int>(); var count = 1000000; //var bytes = new byte[500]; //for (int i = 0; i < 500; i++) { // bytes[i] = (byte)(i % 255); //} sw.Start(); var cnt = 0; l1.OnAppend += (ptr) => { var len = *(int *)ptr; var message = new byte[len]; Marshal.Copy(ptr, message, 0, len); //var lng = BitConverter.ToInt64(message, 0); //Assert.AreEqual(cnt, lng); if (count - 1 == cnt) { tcs.SetResult(cnt); } cnt++; }; var cnt2 = 0; l2.OnAppend += (ptr) => { var len = *(int *)ptr; var message = new byte[len]; Marshal.Copy(ptr, message, 0, len); //var lng = BitConverter.ToInt64(message, 0); //Assert.AreEqual(cnt, lng); if (count - 1 == cnt2) { tcs2.SetResult(cnt2); } cnt2++; }; for (int i = 0; i < count; i++) { l1.Append((long)i);//BitConverter.GetBytes((long)i))); // } tcs.Task.Wait(); tcs2.Task.Wait(); sw.Stop(); Console.WriteLine($"Elapsed msec: {sw.ElapsedMilliseconds}"); l1.Dispose(); l2.Dispose(); //Thread.Sleep(100000); }