C#에서 가장 낮은 메모리 풋 프린트를 가진 가장 빠른 시리얼 라이저 및 디스 라이어 라이저?

StackOverflow https://stackoverflow.com/questions/626766

문제

나는 현재 바이너리 포맷터 (리모 팅)를 사용하여 LAN 주변을 보내기 위해 객체를 직렬화하고 사로화하고 있습니다.

최근에 2.0에서 .NET 3.5로 업그레이드했습니다. 3.5는 직렬화 성능을 향상시키기 위해 새로운 유형을 도입 했습니까?

나는 보았다 DataContractSerializer, 그러나 이것은 XML의 근본적인 XML에 대한 직렬화… 메모리 발자국을 증가시켜야합니다.

LAN에서 객체를 보내는 가장 빠른 직렬 라이저는 무엇입니까? 나는 인터 로프 나 버전을 신경 쓰지 않는다…. 나는 속도가 필요하다!

나는 타사 오픈 소스 대안에 개방되어 있습니다.

도움이 되었습니까?

해결책

처럼 들린다 프로토콜 버퍼 당신이 찾고있는 것일 수 있습니다.

내가 알고있는 세 가지 .NET 구현이 있습니다. protobuf-net, Protobuf-csharp-port 그리고 프로토#.

그만큼 성능 비교 프로토콜 버퍼가 크기 및 직렬화/사막화 속도 측면에서 내장 된 직렬화기를 능가한다는 것을 보여줍니다.

다른 팁

나는 약간있다 주요 .NET 시리얼 라이저의 벤치 마크 Northwind 데이터 세트를 기반으로 사용할 수 있습니다.

@marcgravell 바이너리 프로토 비프 네트는 벤치마킹 된 가장 빠른 구현입니다. 7x BCL에서 사용 가능한 Microsoft 가장 빠른 시리얼 라이저 (XML DataContractSerializer)보다 빠릅니다.

Microsoft의 Jsondatacontractserializer는 매우 느립니다 9x Protobuf-net 이상이 느리게 3.6x 내 자신보다 느립니다 Jsonserializer.

에서 성능 비교 @luke에 의해 연결되어 있습니다 DataContractJsonSerializer 다른 MS 시리얼 라이저에 비해 매우 잘 수행됩니다.

JSON의 유비쿼터스와 사용할 수있는 용이성을 감안할 때 DataContractJsonSerializer, "프로토콜 버퍼"를 사용해야 할 이유가 많지 않습니다. JSON은 언어와 플랫폼 사이를 튕겨서 디버깅하기가 더 쉬울 것이며 아름답게 압축됩니다.

(Google은 CS 101 개념을 취하고 구현하는 것으로 유명 해지는 방식을 좋아합니다. C에서는 "프로토콜 버퍼" "구조"라고 부릅니다.

내가 보여준 것처럼 이 답변 생성 된 코드는 가장 빠른 시리얼 라이저 일 수 있습니다. 그러나 초기 단계에 있으며 여전히 다른 직렬화기가 제공하는 몇 가지 기능이 부족합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top