2009-08-20 2 views
4

편안한 서비스를 업그레이드하고 있으며 DataContractSerializer를 사용하여 응답을 출력하고 있습니다. 이전 버전에서는 XmlSerializer를 사용하여 사용자 지정 직렬화를 사용했습니다. 이 버전은 속성을 많이 사용했기 때문에 DCS는 결코 사용하지 않기 때문에 새로운 응답 크기가 gzip으로 압축하면 이전 버전 크기의 1.5 배가됩니다. (또는 압축되지 않은 경우 거의 3 배 크기).DataContractSerializer XML XML serializer 출력의 두 배 크기 - 정말 빠르고 확장 성이 있습니까?

그럼 DCS가 XmlSerializer보다 더 빠르고 확장 가능한 솔루션이 될지 궁금합니다.

+1

DCS는 일반적으로 더 빠릅니다. 빠르기 때문에 최적화되었지만 다소 제한적입니다 (특성은 지원하지 않습니다). 직렬화/직렬화 또는 작은 페이로드의 속도에 대해 더 중요한 점을 고려해야합니다. 일반적으로 둘 중 하나를 선택할 수는 없습니다. –

+0

그래서 당신은 스스로 측정을해야 할 것입니다. 주어진 시나리오에서 더 중요한 것은 : 직렬화 속도 또는 XML 페이로드의 크기입니다. 결국에만 결정할 수 있습니다. –

+0

감사합니다. 마크를 입력하십시오. 이것은 (공개 API, 모바일 사용자, 응답 시간 요구 사항) 빠르도록 설계된 것을 감안할 때 매우 쉬운 호출입니다. 나는 모든 지침이 스피드와 관련하여 오해의 소지가 있다는 점에 조금 실망했다. 바라기를이 아주 유용한 정보는 나온다. –

답변

4

누구가 더 빠르고 더 확장 성이 있다고 말했습니까? DCS의 핵심 장점 중 하나라는 것을 기억하지 못합니다. 누군가는 DCS가 더 빨리 직렬화 할 수 있다고 말했지만, 전송 시간은 종종 직렬화 시간을 단축시킵니다. 10 % 더 빨리 직렬화하고 큰 페이로드를 생성하면 실제로 전체 대기 시간이 20 % 증가 할 수 있습니다.

크기가 마음에 들지 않으면 DataMember attribute의 짧은 이름을 사용하여 원본 XML을 축소 할 수 있습니다. 이 방법은 XmlSerializer에서도 작동하지만 XmlElement 특성을 사용합니다. DCS를 사용하면 요소 대 특성의 크기 때문에 XmlSerializer의 크기가 가능한 한 작은 단점이됩니다.

+1

내가해온 검색의 대부분은 XmlSerializer를 통한 DCS를 권장합니다. 당신의 대답은 원칙적으로 제 걱정거리에 동의하는 것 같습니다. 다른 누군가? 누구나 실제 벤치 마크의 모든 요소를 ​​가지고 있습니까? –

+0

연구 결과는 어디서 얻었습니까? 여기에 "DCS는 멋지다, XmlSerializer는 어제 soooo이다"라는 태도가 있지만, 나는 그것에 동의하지 않고 결코 이해하지 못한다. 벤치 마크하기가 어렵지 않아야합니다. 그러나 perf가 다른 하나를 선택하기위한 주된 기준이되어서는 안된다. 유지 보수성, 서비스 가능성, 안정성 등을 살펴보십시오. – Cheeso

+0

Cheeso 답장을 보내 주셔서 감사합니다. 나는 속도가 일반적으로 2 차적이라는 관점에 동의하며 DCS가 좋은 기술이라는 것에 동의하지 않는 것에 동의한다. 그렇다면 확장 성과 응답 시간 요구 사항이 많은 공개 된 트래픽이 많은 공개 API를 연구 중이며, 이는 우리 사이트와 파트너 모두에게 타격을 줄 수 있어야합니다. 공개적으로, 저는 이전 버전과의 호환성을 유지할 수 있어야합니다. 즉, 제가이 결정에 잠시 붙어있을 것입니다. –

1

XML 페이로드의 크기를 줄이려면 XMLContialSerializer가 XMLSerializer보다 느린 것처럼 응답합니다. (나에게있어 실제 성능 측정에 중요한 요소 임). DCS에 관해 좋은 점이 몇 가지 있지만 속도가 중요하다면 건너 뜁니다.

누구든지이 의견에 동의하는지 정말 궁금 할 것입니다.

+1

XML의 크기가 성능을 측정하는 좋은 방법이라고 생각합니다. XML이 압축됩니까? 암호화 되었습니까? 텍스트로 전송됩니까? 어떤 인코딩? 아니면 바이너리로? 이것은 XML Serializer가 대부분의 옵션을 제공하지 않는다는 것을 제외하고는 잘못된 척도입니다. –

+0

x 바이트/초를 다운로드 할 수 있고 솔루션 a가 10 바이트이고 솔루션 b가 20 인 경우 크기가 패킷의 크기보다 작은 경우가 아니라면 a는 b로 전송하는 데 2 ​​배의 시간이 소요됩니다. 나는 네트워크 속도가 CPU보다 훨씬 더 병목이 있다고 가정하므로 10-15 %의 CPU 시간은 공식을 상당히 변경하지 않을 것입니다. 내 질문에 응답의 크기를 일반 텍스트로 지정하고 gzip을 압축하여 지정했습니다. 인코딩은 크기를 선형 적으로 변경하므로 중요하지 않습니다. 즉, 나는 JSONSerializer도 사용할 것이다. 유연성이 좋다. –

관련 문제