public void JsonNetSimpleObjectTest() { const int WarmupIterations = 10; const int Iterations = 5000; Stopwatch writeStopWatch = new Stopwatch(); byte[] buffer = new byte[1024]; byte[] serialized; JsonNetSimpleObject writeObject = new JsonNetSimpleObject() { Name = "Simple-1", Id = 2311, Address = "Planet Earth", Scores = new[] { 82, 96, 49, 40, 38, 38, 78, 96, 2, 39 }, }; ObjectReaderWriterFactory factory = new PortableBinaryObjectReaderWriterFactory(); // Serialize the test object to a byte array using (var stream = new MemoryStream(buffer)) { IObjectWriter writer; GC.Collect(3, GCCollectionMode.Forced, true); // Warm-up for (int i = 0; i < WarmupIterations; i += 1) { stream.SetLength(0); writer = factory.CreateWriter(stream); JsonNetSimpleObject.WriteTo(writer, writeObject); } writer = factory.CreateWriter(Stream.Null); writeStopWatch.Start(); for (int i = 0; i < Iterations; i += 1) { JsonNetSimpleObject.WriteTo(writer, writeObject); } writeStopWatch.Stop(); serialized = stream.ToArray(); } string writeDump = serialized.ToAsciiDumpString(); Debug.WriteLine(writeDump); Test.Output("{0} writer serialized {1} simple objects ({2:#,###} bytes each) in {3} ms ({4} ticks @ {5}). Average is {6} ticks per object.", factory.Name, Iterations, serialized.Length, writeStopWatch.Elapsed.TotalMilliseconds, writeStopWatch.ElapsedTicks, Stopwatch.Frequency, writeStopWatch.ElapsedTicks / Iterations); Stopwatch readStopWatch = new Stopwatch(); JsonNetSimpleObject readObject = null; // Deserialize the test object from a byte array using (var stream = new MemoryStream(serialized)) { IObjectReader reader; // Warm-up for (int i = 0; i < WarmupIterations; i += 1) { stream.Seek(0, SeekOrigin.Begin); reader = factory.CreateReader(stream); readObject = JsonNetSimpleObject.ReadFrom(reader); } readStopWatch.Start(); for (int i = 0; i < Iterations; i += 1) { stream.Seek(0, SeekOrigin.Begin); reader = factory.CreateReader(stream); readObject = JsonNetSimpleObject.ReadFrom(reader); } readStopWatch.Stop(); } Test.Output("{0} reader deserialized {1} simple objects ({2:#,###} bytes each) in {3} ms ({4} ticks @ {5}). Average is {6} ticks per object.", factory.Name, Iterations, serialized.Length, readStopWatch.Elapsed.TotalMilliseconds, readStopWatch.ElapsedTicks, Stopwatch.Frequency, readStopWatch.ElapsedTicks / Iterations); // Compare objects writeObject.VerifyIsEqual(readObject); }
public void ProtoBufNetTest() { const int WarmupIterations = 10; const int Iterations = 1000000; Stopwatch writeStopWatch = new Stopwatch(); byte[] buffer = new byte[128 * 1024]; byte[] serialized; ProtoBufNetTestObject writeObject = new ProtoBufNetTestObject() { Foo = 12, // 01-01-0C Bar = "bar", // 02-03-62-61-72 Blip = 123.45f, // 03-04-42-F6-E6-66 Blop = 123.4567f, // 04-08-40-5E-DD-3A-A0-00-00-00 }; ObjectReaderWriterFactory factory = new PortableBinaryObjectReaderWriterFactory(); // Serialize the test object to a byte array using (var stream = new MemoryStream(buffer)) { IObjectWriter writer; GC.Collect(3, GCCollectionMode.Forced, true); // Warm-up for (int i = 0; i < WarmupIterations; i += 1) { stream.SetLength(0); writer = factory.CreateWriter(stream); ProtoBufNetTestObject.WriteTo(writer, writeObject); } writer = factory.CreateWriter(Stream.Null); writeStopWatch.Start(); for (int i = 0; i < Iterations; i += 1) { ProtoBufNetTestObject.WriteTo(writer, writeObject); } writeStopWatch.Stop(); serialized = stream.ToArray(); } string writeDump = serialized.ToAsciiDumpString(); Debug.WriteLine(writeDump); Test.Output("{0} writer serialized {1} simple objects ({2:#,###} bytes each) in {3} ms ({4} ticks @ {5}). Average is {6} ticks per object.", factory.Name, Iterations, serialized.Length, writeStopWatch.Elapsed.TotalMilliseconds, writeStopWatch.ElapsedTicks, Stopwatch.Frequency, writeStopWatch.ElapsedTicks / Iterations); Stopwatch readStopWatch = new Stopwatch(); ProtoBufNetTestObject readObject = null; // Deserialize the test object from a byte array using (var stream = new MemoryStream(serialized)) { IObjectReader reader; // Warm-up for (int i = 0; i < WarmupIterations; i += 1) { stream.Seek(0, SeekOrigin.Begin); reader = factory.CreateReader(stream); readObject = ProtoBufNetTestObject.ReadFrom(reader); } readStopWatch.Start(); for (int i = 0; i < Iterations; i += 1) { stream.Seek(0, SeekOrigin.Begin); reader = factory.CreateReader(stream); readObject = ProtoBufNetTestObject.ReadFrom(reader); } readStopWatch.Stop(); } Test.Output("{0} reader deserialized {1} simple objects ({2:#,###} bytes each) in {3} ms ({4} ticks @ {5}). Average is {6} ticks per object.", factory.Name, Iterations, serialized.Length, readStopWatch.Elapsed.TotalMilliseconds, readStopWatch.ElapsedTicks, Stopwatch.Frequency, readStopWatch.ElapsedTicks / Iterations); // Compare objects writeObject.VerifyIsEqual(readObject); }