public void Benchmark()
        {
            const int Iterations = 100000;

            var xmlSerializer = new XmlSerializer(typeof(ContainerWithAbstract), null, null, null, null);
            var customSerializer = CustomSerializer.GetSerializer(typeof(ContainerWithInterface), null, null, null);

            var xmlSerializerStopwatch = Stopwatch.StartNew();

            for (int i = 0; i < Iterations; i++)
            {
                var sb = new StringBuilder();
                using (var stringWriter = new StringWriter(sb))
                {
                    using (var writer = new XmlTextWriter(stringWriter))
                    {
                        xmlSerializer.Serialize(writer, _containerWithAbstract, null);
                    }
                }
            }

            xmlSerializerStopwatch.Stop();

            var customSerializerStopwatch = Stopwatch.StartNew();

            for (int i = 0; i < Iterations; i++)
            {
                var sb = new StringBuilder();
                using (var stringWriter = new StringWriter(sb))
                {
                    using (var writer = new SerializationXmlTextWriter(stringWriter))
                    {
                        customSerializer.SerializeObject(writer, _containerWithInterface, null, false);
                    }
                }
            }

            customSerializerStopwatch.Stop();

            Console.WriteLine("XmlSerializer Elapsed Time: {0}", xmlSerializerStopwatch.Elapsed);
            Console.WriteLine("CustomSerializder Elapsed Time: {0}", customSerializerStopwatch.Elapsed);
        }
        public void Benchmark()
        {
            new XmlSerializer(typeof(JitPreparation), null, null, null, null);
            CustomSerializer.GetSerializer(typeof(JitPreparation), null, null, null);

            var containerWithAbstract =
                new ColdStartContainerWithAbstract
                {
                    Id = "a",
                    One =
                        new ColdStartOneWithAbstract
                        {
                            Id = "b",
                            Two = new ColdStartTwoWithAbstract { Id = "c", Value = "abc" }
                        }
                };
            var containerWithInterface =
                new ColdStartContainerWithInterface
                {
                    Id = "a",
                    One =
                        new ColdStartOneWithInterface
                        {
                            Id = "b",
                            Two = new ColdStartTwoWithInterface { Id = "c", Value = "abc" }
                        }
                };

            var xmlSerializerStopwatch = Stopwatch.StartNew();

            var xmlSerializer = new XmlSerializer(typeof(ColdStartContainerWithAbstract), null, null, null, null);
            var xmlSerializerStringBuilder = new StringBuilder();

            using (var stringWriter = new StringWriter(xmlSerializerStringBuilder))
            {
                using (var writer = new XmlTextWriter(stringWriter))
                {
                    xmlSerializer.Serialize(writer, containerWithAbstract, null);
                }
            }

            using (var stringReader = new StringReader(xmlSerializerStringBuilder.ToString()))
            {
                using (var reader = new XmlTextReader(stringReader))
                {
                    xmlSerializer.Deserialize(reader);
                }
            }

            xmlSerializerStopwatch.Stop();

            var customSerializerStopwatch = Stopwatch.StartNew();

            var customSerializer = CustomSerializer.GetSerializer(typeof(ColdStartContainerWithInterface), null, null, null);
            var customSerializerStringBuilder = new StringBuilder();

            using (var stringWriter = new StringWriter(customSerializerStringBuilder))
            {
                using (var writer = new SerializationXmlTextWriter(stringWriter))
                {
                    customSerializer.SerializeObject(writer, containerWithInterface, null, false);
                }
            }

            using (var stringReader = new StringReader(customSerializerStringBuilder.ToString()))
            {
                using (var reader = new XmlTextReader(stringReader))
                {
                    customSerializer.DeserializeObject(reader);
                }
            }

            customSerializerStopwatch.Stop();

            Console.WriteLine("XmlSerializer Elapsed Time: {0}", xmlSerializerStopwatch.Elapsed);
            Console.WriteLine("CustomSerializder Elapsed Time: {0}", customSerializerStopwatch.Elapsed);
        }