[C# 벤치마크] C# XML Serialize, DeSerialize 벤치마크 성능 측정

소개

안녕하세요. 오늘은 C#에서 BenchMarkDotNet을 이용하여 XML 직렬화, 역직렬화 벤치마크 성능 측정을 하려고 합니다.

예제 코드를 작성하여 어느정도 성능이 나오는지 확인하도록 하겠습니다.



XML 직렬화, 역직렬화 벤치마크 코드 작성

  • C#에서 XML 직렬화, 역직렬화 성능 체크하기 위한 벤치마크 테스트 코드 작성을 하였습니다.
  • BenchMarkDotNet 을 이용하여 벤치마크 성능을 테스트 하였습니다.
  • 직렬화, 역직렬화는 각각 1번, 100번, 10000번 테스트 진행하였습니다.


예제 코드

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;

namespace BenchMarkTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run<SerializeBenchMarkTest>();
        }
    }

    public class Config
    {
        public Guid Id;
        public string IP;
        public string PassWorrd;
        public string SID;
    }

    [MemoryDiagnoser]
    public class SerializeBenchMarkTest
    {
        [Params(1, 100, 10000)]
        public int Iterations { get; set; }

        public Config CreateXMLFile()
        {
            Config myConfig = new Config()
            {
                Id = Guid.NewGuid(),
                IP = "127.0.0.1",
                PassWorrd = "1234@asdf",
                SID = "databaseOwner"
            };

            return myConfig;
        }

        public void SerializerXML(int iterations)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(Config));
            Config myConfig = CreateXMLFile();

            for (int index = 0; index < iterations; index++)
            {
                using (MemoryStream xmlStream = new MemoryStream())
                {
                    xmlSerializer.Serialize(xmlStream, myConfig);
                }
            }
        }

        public void DeSerializerXML(string xmlConfig, int iterations)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(Config));

            for (int index = 0; index < iterations; index++)
            {
                using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlConfig)))
                {
                    stream.Position = 0;
                    Config testObj = ((Config)xmlSerializer.Deserialize(stream));
                }
            }
        }

        [Benchmark]
        public void SerializeXMLTest()
        {
            SerializerXML(Iterations);
        }

        [Benchmark]
        public void DeSerializeXMLTest()
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(Config));
            string xmlConfig = string.Empty;
            Config myConfig = CreateXMLFile();

            using (MemoryStream xmlStream = new MemoryStream())
            {
                xmlSerializer.Serialize(xmlStream, myConfig);
                xmlConfig = Encoding.UTF8.GetString(xmlStream.ToArray());
            }

            DeSerializerXML(xmlConfig, Iterations);
        }
    }
}


실행 결과



728x90

이 글을 공유하기

댓글

Designed by JB FACTORY