2009-02-04 3 views
3

알로하,XML 파일을 deserialze하는 가장 효율적인 방법은 무엇입니까

저는 deserialize하려는 8MB XML 파일이 있습니다. 은이 코드를 사용하고 있습니다 :

public static T Deserialize<T>(string xml) 
{ 
    TextReader reader = new StringReader(xml); 
    Type type = typeof(T); 
    XmlSerializer serializer = new XmlSerializer(type); 
    T obj = (T)serializer.Deserialize(reader); 
    return obj; 
} 

이 코드는 나에게 오히려 느린 분 정도에 실행됩니다. 직렬화 dll을 사전 컴파일하기 위해 sgen.exe를 사용하려고 시도했지만 성능이 변경되지 않았습니다.

성능을 향상시키기 위해 어떤 다른 옵션을 사용해야합니까?

[편집] 기본 변환을 수행하기 위해 비 직렬화에 의해 생성 된 객체가 필요합니다. XML은 외부 웹 서비스로부터 수신됩니다.

+0

어떤 종류의 변형을 적용 하시겠습니까? XSLT (XmlReader 또는 XPathDocument와 함께 사용)를 사용 해본 적이 있습니까? –

+0

더 많은 시간을 소비하는 코드 줄은 무엇입니까? serilizer를 만들 때 또는 deserialization 자체를 만들 때? –

답변

3

XmlSerializer는 리플렉션을 사용하므로 성능이 문제가 될 경우 최상의 선택이 아닙니다.

당신은 XmlDocument 또는 XDocument 클래스를 사용하여 XML 문서의 DOM을 구축하고 작업을하거나, 심지어 더욱 빠르게 XmlReader를 사용할 수 있습니다. 그러나 XmlReader에는 필요한 경우 객체 매핑을 작성해야합니다.

XML 데이터를 사용하여 수행하려는 작업에 가장 적합한 방법은 무엇입니까? 특정 값을 추출하기 만하면됩니까, 아니면 전체 문서 객체 모델을 작업하고 편집해야합니까?

2

예 리플렉션을 사용하지만 성능은 회색 영역입니다. 8MB의 파일을 말할 때 ... 예. 속도가 훨씬 느려집니다. 그러나 작은 파일을 다루는 경우에는 그렇지 않을 것입니다.

필자는 XmlReader 또는 XPath 파일을 읽는 것이 쉽지 않거나 실제로 더 빠를 것이라고 말하지 않습니다. XML을 객체 또는 객체로 XML로 변환하는 것이 더 쉬운 이유는 무엇입니까? 별로.

이제 미세 입자 제어가 필요하면 손으로해야합니다.

개인적으로 선택은 다음과 같습니다. 나는 추악한 불쾌한 코드를 저장하기 위해 약간의 속도를 포기할 용의가있다.

소프트웨어 개발의 다른 모든 것들과 마찬가지로 트레이드 오프가 있습니다.

1

"T"클래스의 IXmlSerializable을 구현하여 사용자 지정 논리를 작성하여 XML을 처리 할 수 ​​있습니다.

+0

재미있는 소식입니다. 고성능 직렬화 옵션에 대한 정보를 알려주십시오. – edosoft

관련 문제