간략한 소개
이 블로그는 주로 Xml, Json, Hessian, 프로토콜 버퍼의 직렬화 및 디직렬화 성능을 비교하며, Xml과 Json의 기본 개념은 제외합니다. Hessian: Hessian은 바이너리 RPC 프로토콜과 내장된 직렬화 기능을 사용하여 RMI 기능을 제공하는 경량 원격 onhttp 도구입니다. 프로토콜 버퍼: 구글과의 데이터 교환을 위한 포맷으로, 언어에 독립적이며, 이진 형식이기 때문에 xml을 사용하는 것보다 훨씬 빠르고, 분산 애플리케이션 간 데이터 통신이나 이기종 환경에서 데이터 교환에 사용할 수 있습니다. 효율적이고 호환 가능한 이진 데이터 전송 형식으로서 네트워크 전송, 구성 파일, 데이터 저장 등 다양한 분야에서 사용할 수 있습니다. 구글은 Java, C++, Python 구현을 제공하며, 이제는 인터넷에도 C# 같은 언어 구현체가 있습니다.
직렬화 및 디직렬화
XML: .Net에 포함된 XmlSerializer를 사용하세요. Json: ServiceStack.Text를 사용하는데, Newtonsoft.Json보다 성능이 더 좋지만 가장 빠른 fastJSON.net 가 좋습니다. Hessian: nuget에서 다운로드한 HessianCSharp 라이브러리를 사용합니다. 프로토콜 버퍼: nuget에서 다운로드한 protobuf-net 사용 다음은 테스트에서 사용된 개체들입니다.
테스트 머신에 사용된 i7HQ 2.6HZ 프로세서입니다. 다음은 검사 결과입니다 연속화
직렬 전환
직렬화 후 바이트 길이
먼저 직렬화에 대해 이야기해 보겠습니다. 여기서는 각각 100번, 1000번, 10000번, 100000번에 테스트합니다. 좌표는 완료 시간, 단위는 밀리초입니다. 10000번 이내에 테스트할 때 4가지 종류의 직렬화 시간 소모가 매우 짧고, 모두 200밀리초 이내입니다. 10000번, 100000번 후, 모두 성장하기 시작합니다. 가장 나쁜 것은 XML이고 가장 좋은 것은 프로토콜 버퍼입니다. 하지만 10000번 이내일 때는 헤시안이 프로토콜 버퍼보다 낫습니다. 10,000번의 디직렬화 내에서는 큰 차이가 없지만, 10,000번 정도 하면 이미 Hessian이 더 많은 시간이 걸리고, 100,000번 후에는 Xml을 직접 앞서서 항상 제 코드에 문제가 있다고 생각하게 되고, 최고의 성능은 여전히 프로토콜 버퍼입니다. 직렬화된 바이트 길이는 XML에서 가장 긴 것인데, 파일이 많은 엔딩 태그()를 포함하고</Name> 있고 프로토콜 버퍼가 여전히 가장 좋습니다.
위 그래프를 바탕으로 Protocol Buffers가 최고임을 거의 빠르게 결론 내릴 수 있지만, 다음 측면들로부터 포괄적으로 평가해야 한다고 생각합니다: 1. 가독성: XML과 Json은 직렬화 후 모두 텍스트이며, 가독성이 매우 우수합니다. 예를 들어, 중간에 오류가 있어도 교환된 데이터를 쉽게 확인할 수 있고, 심지어 데이터를 시뮬레이션하여 테스트할 수 있습니다; Hessian과 Protocol Buffer 모두 이진수이며, 직렬화 후에는 내용이 읽을 수 없어 시스템 문제 해결에 일정한 영향을 미칩니다. 2. 다재다능함: XML과 JSON은 이미 오래된 데이터 교환 형식이며, 이 두 형식은 일반 시스템 간 데이터 교환을 위한 두 가지 형식입니다. 헤시안과 프로토콜 버퍼는 비교적 인기가 없으며 덜 사용됩니다. 3. 편의성: Hessian은 사실 완전한 RPC 프레임워크입니다. 서버 측에서 인터페이스를 정의하고 구현한 뒤, 인터페이스를 클라이언트에 복사합니다. 약간의 코딩 후에는 서버 측을 로컬 메서드를 호출하듯 호출할 수 있는데, 이는 다른 세 도구에서는 지원되지 않으며, 성능도 나쁘지 않습니다.
|