Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷!스킬업

닷넷 기술을 조금 더 깊이 다루고자 합니다. 특정 주제를 정하지 않고 이슈 발생 시 마다 체계적으로 정리하여 공유하겠습니다. 이전 자료를 옮겨온 곳이기도 합니다.

[직렬화] 직렬화 방법에 따른 크기 비교

작성자 : 박종명
최초 작성일 : 2008-06-16 (월요일)
최종 수정일 : 2008-06-16 (월요일)
조회 수 : 2591

닷넷에서 특정 개체를 직렬화 하는 방법으로는 3가지가 존재한다.
직렬화에 대한 자세한 사항은 다음에 알아 보도록 하고 일단 이 3가지의 차이점에 대해 간략히 살펴보자
 
1. 바이너리 직렬화
    개체를 프린트 불가능한 바이트형 데이터로 저장
 
2. XML 직렬화
    개체를 XML 표준에 따른 XML 문자로 저장
 
3. SOAP 직렬화
    개체를 XML 표준에 따른 XML 문자로 저장 + 속성을 정의한 명세 포함 
 

= 직렬화 비교 =

직렬화 방법

형식 정보

(type information)

크기

(결과물의 크기)

이식성

(상호운용성)

바이너리 직렬화

작다

낮다

Xml 직렬화

×

크다

높다


 
SOAP 직렬화 역시 XML 로 저장되기 때문에 위의 비교표에서는 제외 하였다.
 
= 테스트 결과 =
실제 테스트를 통해 각 직렬화 방법에 대한 결과를 보도록 하자.
 
아래 직렬화 대상이 되는 개체(소스오브젝트) 가 정의되어 있다 (대략 클래스 크기를 유추해 보기 바란다)

[Serializable]

public class MyClass

{

        public int myIntField;       

        public double myDoubleField ;

        public decimal myDecimalField;

 

        public int[] myIntArray;

        public MyClass()

        {

               this.myIntField = 100;

               this.myDoubleField = 200;

               this.myDecimalField = 300;

               this.myIntArray = new int[1000];

        }

}


 
 
위 클래스를 아래처럼 3가지 방법으로 직렬화 한다.

static void Main(string[] args)

{

        FileStream fileStream = new FileStream

                     ("binary.bin",FileMode.Create,FileAccess.Write,FileShare.None);

        FileStream fileStream2 = new FileStream

                     ("soap.xml",FileMode.Create,FileAccess.Write,FileShare.None);

        FileStream fileStream3 = new FileStream

                     ("xml.xml",FileMode.Create,FileAccess.Write,FileShare.None);

 

        MyClass myClass = new MyClass();                                           

                      

        //1. 바이너리 직렬화

        IFormatter binaryFormatter = new BinaryFormatter();

        binaryFormatter.Serialize(fileStream,myClass);

 

        //2. XML 직렬화

        XmlSerializer xmlSerializer = new XmlSerializer(myClass.GetType());

        xmlSerializer.Serialize(fileStream3,myClass);

 

        //3. SOAP 직렬화

        IFormatter soapFormatter = new SoapFormatter();

        soapFormatter.Serialize(fileStream2,myClass);               

 

        fileStream.Close();                                                        

}


 
이렇게 파일스크림에 직렬화를 하고 해당 파일으 크기를 확인 해 보자
binary.bin : 4,236 byte
soap.xml  : 16,853 byte
xml.xml    : 18,286 byte
 
바이너리 vs XML 의 결과를 보면 크기가 대략 4배 정도 차이남을 알 수 있다.

물론 개체(소스오브젝트)의 크기에 따라 조금씩 크기의 변화는 있을 수 있으나 바이너리 직렬화가 크기면에서는 훨씬 장점을 가진다고 할 수 있다.

이름
비밀번호
홈페이지
NJ <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요