public void DynamicFormatterPerformanceTest()
        {
            var DynamicFormatter = new DynamicFormatter <ClassForTest>();
            var testEntity       = new ClassForTest();
            var watch            = Stopwatch.StartNew();

            for (int i = 0; i < iterationCount; i++)
            {
                var buffer      = DynamicFormatter.Serialize(testEntity);
                var testEintity = DynamicFormatter.Deserialize(buffer);
            }
            watch.Stop();
            Debug.WriteLine($"DynamicSerialize result {watch.ElapsedMilliseconds} ms.");

            BinaryFormatter binary = new BinaryFormatter();

            watch = Stopwatch.StartNew();
            for (int i = 0; i < iterationCount; i++)
            {
                using (MemoryStream mStream = new MemoryStream())
                {
                    binary.Serialize(mStream, testEntity);
                    mStream.Position = 0;
                    var testEintity = binary.Deserialize(mStream);
                }
            }
            watch.Stop();
            Debug.WriteLine($"BinarySerializer result {watch.ElapsedMilliseconds} ms.");
        }
 public void CrossReferenceClass()
 {
     var entity           = new CrossReferenceClass();
     var DynamicFormatter = new DynamicFormatter <CrossReferenceClass>();
     var buffer           = DynamicFormatter.Serialize(entity);
     var result           = DynamicFormatter.Deserialize(buffer);
 }
        public void TestPerfomenceStrongTypeWithMsgPack()
        {
            var entity = new StrongStructure();

            var serializer = new DynamicFormatter <StrongStructure>();

            {
                var buffer = serializer.Serialize(entity);
                var result = serializer.Deserialize(buffer);
            }

            var watch = Stopwatch.StartNew();

            for (int i = 0; i < 1000; i++)
            {
                var buffer = serializer.Serialize(entity);
                var result = serializer.Deserialize(buffer);
            }
            watch.Stop();

            long ms = watch.ElapsedMilliseconds;

            {
                var bin = MessagePackSerializer.Serialize(entity);

                // Okay to deserialize immutable obejct
                var point = MessagePackSerializer.Deserialize <StrongStructure>(bin);
            }

            var msgPackWatch = Stopwatch.StartNew();

            for (int i = 0; i < 1000; i++)
            {
                var bin = MessagePackSerializer.Serialize(entity);

                // Okay to deserialize immutable obejct
                var point = MessagePackSerializer.Deserialize <StrongStructure>(bin);
            }
            msgPackWatch.Stop();

            var message = $"StrongTypeFormatter {watch.ElapsedMilliseconds} ms\r\nMessagePackSerializer {msgPackWatch.ElapsedMilliseconds} ms";

            Assert.IsTrue(watch.ElapsedTicks < msgPackWatch.ElapsedTicks, message);

            TestContext.WriteLine(message);
        }
        public void DynamicFormatterNullableEnumNull()
        {
            TestEnum?enumVal          = null;
            var      DynamicFormatter = new DynamicFormatter <TestEnum?>();
            var      buffer           = DynamicFormatter.Serialize(enumVal);
            var      result           = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(enumVal, result);
        }
        public void DynamicFormatterNullableEnum()
        {
            TestEnum?enumVal          = TestEnum.second;
            var      DynamicFormatter = new DynamicFormatter <TestEnum?>();
            var      buffer           = DynamicFormatter.Serialize(enumVal);
            var      resultTime       = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(enumVal, resultTime);
        }
        public void DynamicFormatterNullableWhenNullTest()
        {
            Nullable <bool> testEntity       = null;
            var             DynamicFormatter = new DynamicFormatter <bool?>();
            var             buffer           = DynamicFormatter.Serialize(testEntity);
            var             resultEntity     = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(testEntity, resultEntity);
        }
        public void DynamicFormatterDateTimeTest()
        {
            var time             = DateTime.Now;
            var DynamicFormatter = new DynamicFormatter <DateTime>();
            var buffer           = DynamicFormatter.Serialize(time);
            var resultTime       = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(time, resultTime);
        }
        public void DynamicFormatterStringTest()
        {
            var DynamicFormatter = new DynamicFormatter <string>();
            var someString       = "This is some string";
            var stringBytes      = DynamicFormatter.Serialize(someString);
            var someStringCopy   = DynamicFormatter.Deserialize(stringBytes);

            Assert.AreEqual(someString, someStringCopy);
        }
        public void DynamicFormatterStringInClass()
        {
            var DynamicFormatter = new DynamicFormatter <ClassWithStrings>();
            var testClass        = new ClassWithStrings();
            var classBytes       = DynamicFormatter.Serialize(testClass);
            var testClassCopy    = DynamicFormatter.Deserialize(classBytes);

            Assert.AreEqual(testClass.someString, testClassCopy.someString);
            Assert.AreEqual(testClass.secondSomeString, testClassCopy.secondSomeString);
        }
        public void DynamicFormatterGenericDecimal()
        {
            var entity = new ChashedObject <decimal>();

            entity.Value = 90.1M;
            var DynamicFormatter = new DynamicFormatter <ChashedObject <decimal> >();
            var buffer           = DynamicFormatter.Serialize(entity);
            var result           = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(entity.Value, result.Value);
        }
        public void DynamicFormatterNullableStructTest()
        {
            TestStruct?testEntity = new TestStruct()
            {
                B = 50,
                G = 10,
                R = 32
            };
            var DynamicFormatter = new DynamicFormatter <TestStruct?>();
            var buffer           = DynamicFormatter.Serialize(testEntity);
            var resultEntity     = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(testEntity, resultEntity);
        }
        public void DynamicFormatterClassWithNullableTest()
        {
            var entity = new ClassWithNullable();

            entity.intNullable  = 31;
            entity.longNullable = 313;
            var DynamicFormatter = new DynamicFormatter <ClassWithNullable>();
            var buffer           = DynamicFormatter.Serialize(entity);
            var result           = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(entity.intNullable, result.intNullable);
            Assert.AreEqual(entity.longNullable, result.longNullable);
            Assert.IsTrue(result.boolNulable == null);
        }
        public void DynamicFormatterClassTest()
        {
            var DynamicFormatter = new DynamicFormatter <ClassForTest>();
            var testEntity       = new ClassForTest();
            var watch            = Stopwatch.StartNew();

            for (int i = 0; i < iterationCount; i++)
            {
                var buffer      = DynamicFormatter.Serialize(testEntity);
                var testEintity = DynamicFormatter.Deserialize(buffer);
            }
            watch.Stop();
            Debug.WriteLine($"DynamicSerialize result {watch.ElapsedMilliseconds} ms.");
        }
        public void DynamicFormatterStuctTest()
        {
            var DynamicFormatter = new DynamicFormatter <TestStruct>();
            var testEntity       = new TestStruct()
            {
                B = 50,
                G = 99,
                R = 1
            };

            var testEntityBytes   = DynamicFormatter.Serialize(testEntity);
            var testEintityResult = DynamicFormatter.Deserialize(testEntityBytes);

            Assert.AreEqual(testEntity, testEintityResult);
        }
        public void DynamicFormatterDictionary()
        {
            var entity = new Dictionary <int, int>();

            entity.Add(10, 9);
            entity.Add(50, 12);

            var DynamicFormatter = new DynamicFormatter <Dictionary <int, int> >();
            var buffer           = DynamicFormatter.Serialize(entity);
            var result           = DynamicFormatter.Deserialize(buffer);

            foreach (var keyValue in entity)
            {
                Assert.AreEqual(keyValue.Value, result[keyValue.Key]);
            }
        }
        public void AdebugTest()
        {
            var entity = new StrongStructure();

            var serializer = new DynamicFormatter <StrongStructure>();

            var watch = Stopwatch.StartNew();

            for (int i = 0; i < 50; i++)
            {
                var buffer = serializer.Serialize(entity);
                var result = serializer.Deserialize(buffer);
            }
            watch.Stop();

            long ms = watch.ElapsedMilliseconds;
        }
        public void DynamicFormatterGenericInt()
        {
            var entity = new int[]
            {
                10,
                20,
                30
            }.ToList();

            var DynamicFormatter = new DynamicFormatter <List <int> >();
            var buffer           = DynamicFormatter.Serialize(entity);
            var result           = DynamicFormatter.Deserialize(buffer);

            for (int i = 0; i < entity.Count; i++)
            {
                Assert.AreEqual(result[i], entity[i]);
            }
        }
        public void DynamicFormatterDateTimeInClass()
        {
            var firstDate        = DateTime.Now;
            var secondDate       = DateTime.Now.AddHours(1);
            var DynamicFormatter = new DynamicFormatter <ClassWithDateTime>();

            var testEntity = new ClassWithDateTime()
            {
                FirstDate = firstDate,
                OtherDate = secondDate
            };

            var buffer     = DynamicFormatter.Serialize(testEntity);
            var resultTime = DynamicFormatter.Deserialize(buffer);

            Assert.AreEqual(testEntity.FirstDate, resultTime.FirstDate);
            Assert.AreEqual(testEntity.OtherDate, resultTime.OtherDate);
        }
        public void DynamicFormatterGenericClass()
        {
            var entity = new ClassWithNullable[]
            {
                new ClassWithNullable(),
                new ClassWithNullable(),
                new ClassWithNullable()
            }.ToList();

            var DynamicFormatter = new DynamicFormatter <List <ClassWithNullable> >();
            var buffer           = DynamicFormatter.Serialize(entity);
            var result           = DynamicFormatter.Deserialize(buffer);

            for (int i = 0; i < entity.Count; i++)
            {
                Assert.AreEqual(result[i].longNullable, entity[i].longNullable);
            }
        }
        public void TestPerfomenceStrongTypeWithProtoBuf()
        {
            var entity = new StrongStructure();

            var serializer = new DynamicFormatter <StrongStructure>();

            var watch = Stopwatch.StartNew();

            for (int i = 0; i < 1000; i++)
            {
                var buffer = serializer.Serialize(entity);
                serializer.Deserialize(buffer);
            }
            watch.Stop();

            long ms = watch.ElapsedMilliseconds;

            var protoBuf = Stopwatch.StartNew();

            {
                var buffer = ProtoBufHelper.ProtoSerialize(entity);
                var obj    = ProtoBufHelper.ProtoDeserialize <StrongStructure>(buffer);
            }

            for (int i = 0; i < 1000; i++)
            {
                var buffer = ProtoBufHelper.ProtoSerialize(entity);
                var obj    = ProtoBufHelper.ProtoDeserialize <StrongStructure>(buffer);
            }
            protoBuf.Stop();

            var message = $"StrongTypeFormatter {watch.ElapsedMilliseconds} ms\r\nprotoBuf {protoBuf.ElapsedMilliseconds} ms";

            Assert.IsTrue(watch.ElapsedTicks < protoBuf.ElapsedTicks,
                          message);

            TestContext.WriteLine(message);
        }
Пример #21
0
        public static void SerializeTest <T>(T entity, int iterationCount)
        {
            Console.WriteLine();
            long serilizationResult   = 0;
            long desirilizationResult = 0;
            int  objectSize           = 0;

            var watch = new Stopwatch();

            #region dynamicFormatter

            var    dynamicFormatter = new DynamicFormatter <T>();
            byte[] dynamicBytes     = null;
            watch = Stopwatch.StartNew();
            for (int i = 0; i < iterationCount; i++)
            {
                dynamicBytes = dynamicFormatter.Serialize(entity);
            }
            watch.Stop();
            objectSize         = dynamicBytes.Length;
            serilizationResult = watch.ElapsedMilliseconds;

            watch = Stopwatch.StartNew();
            for (int i = 0; i < iterationCount; i++)
            {
                dynamicFormatter.Deserialize(dynamicBytes);
            }
            watch.Stop();
            desirilizationResult = watch.ElapsedMilliseconds;
            Console.WriteLine
                ($"dynamicFormatter deserialize reuslt for {entity.GetType().Name} and {iterationCount} iterations");
            Console.WriteLine($"Serilization: {serilizationResult}ms");
            Console.WriteLine($"Desirilization: {desirilizationResult}ms");
            Console.WriteLine($"Total: {serilizationResult + desirilizationResult}ms");
            Console.WriteLine($"Size: {objectSize} bytes.");

            #endregion dynamicFormatter

            Console.WriteLine();

            #region json

            try
            {
                watch = Stopwatch.StartNew();

                string json = string.Empty;
                for (int i = 0; i < iterationCount; i++)
                {
                    json = JsonConvert.SerializeObject(entity);
                }
                watch.Stop();
                serilizationResult = watch.ElapsedMilliseconds;
                objectSize         = Encoding.Default.GetBytes(json).Length;
                watch = Stopwatch.StartNew();
                for (int i = 0; i < iterationCount; i++)
                {
                    var obj = JsonConvert.DeserializeObject <T>(json);
                }
                watch.Stop();
                desirilizationResult = watch.ElapsedMilliseconds;
                Console.WriteLine
                    ($"JsonConvert reuslt for {entity.GetType().Name} and {iterationCount} iterations");
                Console.WriteLine($"Serilization: {serilizationResult}ms");
                Console.WriteLine($"Desirilization: {desirilizationResult}ms");
                Console.WriteLine($"Total: {serilizationResult + desirilizationResult}ms");
                Console.WriteLine($"Size: {objectSize} bytes.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Json not supported");
            }

            #endregion json

            Console.WriteLine();

            #region Binary

            BinaryFormatter formatter = new BinaryFormatter();
            watch = Stopwatch.StartNew();
            for (int i = 0; i < iterationCount; i++)
            {
                using (var mStream = new MemoryStream())
                {
                    formatter.Serialize(mStream, entity);
                }
            }
            watch.Stop();
            serilizationResult = watch.ElapsedMilliseconds;

            byte[] binaryBytes = null;
            {
                using (var mStream = new MemoryStream())
                {
                    formatter.Serialize(mStream, entity);
                    binaryBytes = mStream.ToArray();
                }
            }
            objectSize = binaryBytes.Length;
            watch      = Stopwatch.StartNew();

            for (int i = 0; i < iterationCount; i++)
            {
                using (var mStream = new MemoryStream(binaryBytes))
                {
                    object obj = formatter.Deserialize(mStream);
                }
            }
            watch.Stop();
            desirilizationResult = watch.ElapsedMilliseconds;
            Console.WriteLine
                ($"BinaryFormatter reuslt for {entity.GetType().Name} and {iterationCount} iterations");
            Console.WriteLine($"Serilization: {serilizationResult}ms");
            Console.WriteLine($"Desirilization: {desirilizationResult}ms");
            Console.WriteLine($"Total: {serilizationResult + desirilizationResult}ms");
            Console.WriteLine($"Size: {objectSize} bytes.");

            #endregion Binary

            Console.WriteLine();

            #region ZeroFormatterSerializer

            try
            {
                byte[] zeroSerializeBytes = null;
                watch = Stopwatch.StartNew();
                for (int i = 0; i < iterationCount; i++)
                {
                    zeroSerializeBytes = ZeroFormatterSerializer.Serialize(entity);
                }
                watch.Stop();
                objectSize         = zeroSerializeBytes.Length;
                serilizationResult = watch.ElapsedMilliseconds;

                watch = Stopwatch.StartNew();
                for (int i = 0; i < iterationCount; i++)
                {
                    T obj = ZeroFormatterSerializer.Deserialize <T>(zeroSerializeBytes);
                }
                watch.Stop();
                desirilizationResult = watch.ElapsedMilliseconds;
                Console.WriteLine
                    ($"ZeroFormatterSerializer reuslt for {entity.GetType().Name} and {iterationCount} iterations");
                Console.WriteLine($"Serilization: {serilizationResult}ms");
                Console.WriteLine($"Desirilization: {desirilizationResult}ms");
                Console.WriteLine($"Total: {serilizationResult + desirilizationResult}ms");
                Console.WriteLine($"Size: {objectSize} bytes.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ZeroFormatter not supported this type");
            }

            #endregion ZeroFormatterSerializer

            Console.WriteLine();

            #region ProtoBuf

            try
            {
                byte[] zeroSerializeBytes = null;
                watch = Stopwatch.StartNew();
                for (int i = 0; i < iterationCount; i++)
                {
                    zeroSerializeBytes = ProtoBufHelper.ProtoSerialize <T>(entity);
                }
                watch.Stop();
                serilizationResult = watch.ElapsedMilliseconds;
                objectSize         = zeroSerializeBytes.Length;
                watch = Stopwatch.StartNew();
                for (int i = 0; i < iterationCount; i++)
                {
                    T obj = ProtoBufHelper.ProtoDeserialize <T>(zeroSerializeBytes);
                }
                watch.Stop();
                desirilizationResult = watch.ElapsedMilliseconds;
                Console.WriteLine
                    ($"ProtoBuf reuslt for {entity.GetType().Name} and {iterationCount} iterations");
                Console.WriteLine($"Serilization: {serilizationResult}ms");
                Console.WriteLine($"Desirilization: {desirilizationResult}ms");
                Console.WriteLine($"Total: {serilizationResult + desirilizationResult}ms");
                Console.WriteLine($"Size: {objectSize} bytes.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ProtoBuf not supported this type");
            }

            #endregion ProtoBuf
        }