상세 컨텐츠

본문 제목

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

.Net Framework/.Net Framework 2.0

by 탑~! 2008. 4. 18. 12:49

본문

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

닷넷에서 특정 개체를 직렬화 하는 방법으로는 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배 정도 차이남을 알 수 있다.
물론 개체(소스오브젝트)의 크기에 따라 조금씩 크기의 변화는 있을 수 있으나 바이너리 직렬화가 크기면에서는 훨씬 장점을 가진다고 할 수 있다.



출처 : http://www.mkex.pe.kr/

'.Net Framework > .Net Framework 2.0' 카테고리의 다른 글

DataSet SerializationFormat  (0) 2008.12.04
직렬화 제어  (0) 2008.04.18
객체 직렬화  (0) 2008.04.18
.NET의 Enterprise Service(COM+) 이해  (0) 2008.04.04
ClickOnce IIS Setup  (0) 2008.04.01

관련글 더보기