[C#] MessagePack 사용 방법

728x90
반응형

 

 

 

 

MessagePack 이란?

MessagePack은 C#용 시리얼 라이저의 일종입니다. MsgPack-Cli 보다 10배 빠르다고 공식 GitHub에 명시되어 있으며, 다른 C# 직렬 변환기보다 성능이 뛰어납니다. 

MessagePack for C#은 또한 매우 빠른 압축 알고리즘 인 LZ4 압축을 기본적으로 지원합니다. 

특히 게임, 분산 컴퓨팅, 마이크로 서비스 또는 데이터 캐시와 같은 응용 프로그램에서 성능이 중요합니다.

 

 


공식 GitHub

https://github.com/neuecc/MessagePack-CSharp

 

neuecc/MessagePack-CSharp

Extremely Fast MessagePack Serializer for C#(.NET, .NET Core, Unity, Xamarin). / msgpack.org[C#] - neuecc/MessagePack-CSharp

github.com

 


Nuget Package를 이용한 MessagePack 설치

Nuget 패키지를 이용해서 설치를 합니다. MessagePack을 검색하여 나오는 상단의 패키지를 설치 합니다.

해당 패키지의 경우 ZeroFormatter에 비해 많은 종속성이 걸려 있습니다. 

 

MessagePack 하나만 설치 했는데도, 아래와 같이 다양한 종속성을 가지고 있네요.

만약, 다른 패키지와 혼용해서 사용하신다면, 아래의 종속성 때문에 오류를 발생하는 경우도 한번 겪었습니다. 

 


 

 

 

 


Sample

전반적으로 ZeroFormatter 와 사용방법에는 큰 차이가 없습니다만, 

ZeroFormatter의 경우 Index Attribute를 이용했지만, MessagePack의 경우는 Key Attribute를 이용하는 차이가 있습니다.

using MessagePack;

namespace MPackTest.Models
{
    [MessagePackObject]
    public class GameEvent
    {
        [Key(0)]
        public virtual int Index { get; set; }
        [Key(1)]
        public virtual int Season { get; set; }
        [Key(2)]
        public virtual int Score { get; set; }
    }
}

 

using MessagePack;
using System;
using System.Collections.Generic;

namespace MPackTest
{
    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 = MessagePackSerializer.Serialize<List<Models.GameEvent>>(gameEvent);
            Console.WriteLine($"Serialize 크기 : {serialize.Length}");


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

            Console.ReadLine();
        }
    }
}

 

 

728x90