2009-10-21 3 views
1

어떤 직렬화를 사용해야합니까?.NET에서 성능이 가장 중요하고 데이터 형식이 중요하지 않은 시나리오에 가장 적합한 직렬화?

100000 개 이상의 요소가있는 큰 사전을 저장해야하며 바이너리인지 포맷되었는지 여부를 신경 쓰지 않고이 데이터를 직접 저장하고로드해야합니다.

지금은 BinarySerializer를 사용하고 있지만 가장 효과적인 지 확실하지 않습니까?

.NET 표준 라이브러리 또는 무료로 제공되는 외부 라이브러리에서 대안을 제안하십시오.

EDIT : 디스크와 그 디스크로 직렬화합니다. 응용 프로그램도 단일 스레드입니다.

답변

2

프로필을 작성하지 않았으므로 이것은 완전히 추측입니다 (즉, 답을 얻기 위해해야 ​​할 일).

하지만 내 생각에 바이너리 시리얼 라이저는 최상의 성능을 제공합니다. 크기와 속도면에서 모두.

4

음, 사전에 무엇이 있는지에 따라 달라질 수 있습니다. 그러나 Protocol Buffers이 충분히 유연하면 (직렬화 할 고유 한 유형을 정의해야합니다. 모든 .NET 유형 또는 그와 비슷한 것은 아닙니다), 꽤 빨랐어 요.

예를 들어, 프로토콜 버퍼에서 반복 된 키/값 쌍 필드가있는 메시지로 사전을 나타냅니다. 궁극적 인 속도의 경우 먼저 CodedOutputStreamCodedInputStream을 사용하여 사전을 별도로 메모리에 모두 읽는 대신 직접 직렬화/역 직렬화 할 수 있습니다. 다시 말하지만 키/값 유형이 무엇인지에 달려 있습니다.

+0

감사합니다. 기본적으로 의 미디어에는 int 및 2 string public 멤버와 private static member가 각각 1 개씩 있습니다. 사적인 일에 관심이 있습니까? 또한 PB를 사용하면 물건을 직렬화 가능으로 표시 할 것인가 아니면 10보다 다른 방식으로 동일한 것을 직렬화 할 수 있으므로 더 복잡합니까? –

+1

"메시지"와 관련된 유형을 설명하고 클래스가 자동 생성됩니다 (부분 클래스로, 원하는 경우 자신 만의 논리를 추가 할 수 있습니다). –

+0

감사합니다. Jon, 나는 이것을 분명히 시도 할 것입니다. 당신이 이것을 썼다면 틀릴 수 없습니다. –

1

이것은 다소 제한이없는 질문입니다. 이것을 메모리에 저장하거나 디스크에 기록하고 있습니까? 이것은 다중 스레드 (및 다중 동시 액세스) 환경에서 실행됩니까? 상황이 중요합니다.

일반적으로 BinarySerializer는 매우 빠르며 ProtoBuffers과 같은 더 나은 압축을 제공하는 외부 라이브러리가 있습니다. 저는 개인적으로 DataContractSerializer를 성공적으로 사용했습니다.

위의 모든 옵션에 대한 좋은 점은 환경과 작동에 적합한 것을 배우기 위해 모든 것을 시도 할 수 있다는 것입니다.

+0

감사합니다. 디스크에 쓰십시오. 그것은 단일 스레드입니다. –

관련 문제