[C#] Zeroformatter 사용 방법

728x90
반응형

 

 

 

 

 

기존에 진행하던 프로젝트에서는 Newtonsoft Json을 이용해서 시리얼라이즈 해서 사용하였습니다.

하지만 새로 진행하는 프로젝트에서 시리얼라이즈 하는 데이터량이 상당이 많아지는 이슈가 발생하였습니다.

 

속도를 개선할 이슈가 발생해서, 기존에 다른 프로젝트에서 사용하였던 Zeroformatter를 다시 도입하였는데요.

이번기회에 다시 한번 정리해보려고 합니다.

 


Zeroformatter 란?

Zeroformatter는 C# 프로젝트에서 사용할 수 있는 직렬화 오픈소스 입니다. 

다양한 시리얼라이저의 사용법을 정리할 생각이지만, 

여러 시리얼라이저의 속도를 직접 비교해 보았을때, 가장 빠른 속도를 보여줬습니다. 

아래의 링크를 통해서 더 자세한 정보를 확인 하실 수 있습니다. 

 

 

https://github.com/neuecc/ZeroFormatter

 

neuecc/ZeroFormatter

Infinitely Fast Deserializer for .NET, .NET Core and Unity. - neuecc/ZeroFormatter

github.com

 


Nuget Package를 이용한 설치

Nuget Package 관리자를 이용해서 Zeroformatter를 검색합니다.

가장 상단에 있는 ZeroFormatter를 설치합니다.

 

 



Sample

먼저 시리얼라이즈 할 객체에 추가 작업을 진행해야 합니다.

아래의 기존 Class에 Zeroformatter를 사용하기 위해서는 virtual 키워드와 index 작업을 진행해줘야 합니다.

그리고 Zeroformatter의 사용을 위한 추가 attribute 도 기입해줘야 합니다.

index작업은 진행하지 않아도 되지만, 기입하는 것이 좀 더 속도가 나온다고 합니다.

using System;

namespace ZeroTest.Models
{
    public class GameEvent
    {
        public int Index { get; set; }
        public int Season { get; set; }
        public int Score { get; set; }
    }
}

 

using System;
using ZeroFormatter;

namespace ZeroTest.Models
{
    [ZeroFormattable]
    [Serializable]
    public class GameEvent
    {
        [Index(0)]
        public virtual int Index { get; set; }
        [Index(1)]
        public virtual int Season { get; set; }
        [Index(2)]
        public virtual int Score { get; set; }
    }
}

 

 

아래와 같이 Serialize 구문을 이용하면 됩니다. 

대략 사이즈와 DeSerialize 했을때 50번째 있는 Index 값을 찍어보았습니다. 

namespace ZeroTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var gameEvent = new List<Models.GameEvent>();
            for (int i = 0; i < 1000; i++)
            {
                gameEvent.Add(new Models.GameEvent { Index = i, Score = i, Season = i });
            }

            var serialize = ZeroFormatterSerializer.Serialize<List<Models.GameEvent>>(gameEvent);
            Console.WriteLine($"Serialize 크기 : {serialize.Length}");


            var deserialize = ZeroFormatterSerializer.Deserialize<List<Models.GameEvent>>(serialize);
            Console.WriteLine($"DeSerialize 50번 인덱스 : {deserialize[50].Index}");

            Console.ReadLine();
        }
    }
}

 

 


참고

퍼포먼스만 보더라도 ZeroFormatter 가 Serialize 부분에서는 가장 빠르다고 나오네요. 

실제 제가 테스트 해보았을 때 도 가장 빨랐던 기억이 있습니다.

다만, 단점 이라면, Index 와 virtual 키워드를 항상 달고 살아야 합니다. ^^

 

 

 

 

 

 

 

 

 

728x90