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);
        }
Пример #2
0
        public void TestComplexObjectBinarySerialization()
        {
            var factory = new PortableBinaryObjectReaderWriterFactory();

            TestComplexObjectSerialization(factory);
        }
        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);
        }