2010-02-28 3 views
0

XmlSerialization은 각 클래스에 대한 serializer 프록시를 만듭니다. 프록시는 공용 필드 만 직렬화 할 수 있도록 다른 어셈블리에 있습니다.datacontract 직렬화가 리플렉션을 사용합니까?

DataContract serialization은 전용 필드도 serialize 할 수 있습니다. 리플렉션을 사용한다는 의미입니까? 그것은 프록시를 사용하는 것보다 느리지 않습니까? (처음 제외)?

답변

1

This protobuf-net pageDataContractSerializer의 성능이 XmlSerializer보다 상당히 우수함을 보여줍니다. 물론 자신의 데이터로 테스트해야하지만, XmlSerializer을 대체하려는 경우 DataContractSerializer이 성능 향상이라고 볼 수 있습니다.

DataContractSerializer이 내부적으로 구현 된 방법을 잘 모르겠지만 일반적으로 직렬 변환기는 고도로 최적화되어 있습니다. 이것은 DataContractSerializer의 경우 특히 그렇습니다. WCF의 성능 그림의 큰 부분이기 때문입니다. 시리얼 라이저가 MSIL 코드를 생성하는 것은 드문 일이 아닙니다. 이 작업이 완료되면 DynamicMethod을 사용하면 (놀랍게도!) 가시성 검사를 건너 뛸 수 있으므로 (MSDN 참조), 리플렉션없이 개인 필드에 액세스 할 수 있습니다.

MSDN에서

:

감안할 때 충분한 보안 권한, 는 직렬화 엔진은 엔진 작성자가 를 작성하지 객체의 직렬화 수 있도록 개인 보호 데이터에 액세스 할 수있는 동적 방법을 사용하여 을 구현했습니다.