Tài liệu

So sánh phương thức tuần tự hóa

Thời gian đọc 6 phút
Trên trang này

So sánh chi tiết theo phương thức cho SerializerComparisonBenchmarks, bao gồm các thư viện được so sánh, ánh xạ API, ảnh chụp hiệu năng và chỉ số chi tiết.

Thư viện và API được so sánh

Thư việnPhương thức benchmarkChữ ký API rút gọn
LiteSerializerLiteSerializer_SerializeLiteSerializer.Serialize(payload)
LiteSerializerLiteSerializer_Serialize_SpanLiteSerializer.Serialize(payload, span)
LiteSerializerLiteSerializer_DeserializeLiteSerializer.Deserialize<BenchPayload>(bytes)
MemoryPackMemoryPack_SerializeMemoryPackSerializer.Serialize(payload)
MemoryPackMemoryPack_Serialize_SpanMemoryPackSerializer.Serialize(writer, payload)
MemoryPackMemoryPack_DeserializeMemoryPackSerializer.Deserialize<BenchPayload>(bytes)
MessagePackMessagePack_SerializeMessagePackSerializer.Serialize(payload)
MessagePackMessagePack_DeserializeMessagePackSerializer.Deserialize<BenchPayload>(bytes)
System.Text.JsonSystemTextJson_SerializeJsonSerializer.SerializeToUtf8Bytes(payload)
System.Text.JsonSystemTextJson_DeserializeJsonSerializer.Deserialize<BenchPayload>(bytes)

Ảnh chụp hiệu năng

Tổng quan về các phương thức tuần tự hóa và giải tuần tự hóa nhanh nhất ở các quy mô payload khác nhau (16, 128 và 1024 phần tử).

Số phần tửTuần tự hóa nhanh nhấtGiải tuần tự hóa nhanh nhấtGhi chú
16MemoryPack Span (24.92 ns)LiteSerializer (69.28 ns)LiteSerializer Span gần bằng với 29.10 ns. Giải tuần tự hóa MemoryPack là 75.13 ns.
128MemoryPack Span (28.65 ns)LiteSerializer (115.40 ns)LiteSerializer Span gần bằng với 31.85 ns. Giải tuần tự hóa MemoryPack là 118.78 ns.
1024MemoryPack Span (54.11 ns)LiteSerializer (423.75 ns)LiteSerializer Span gần bằng với 57.31 ns. Giải tuần tự hóa MemoryPack là 448.05 ns.

Kết quả chi tiết

So sánh đầy đủ các chỉ số của mọi thư viện và kích thước payload từ các báo cáo BenchmarkDotNet.

Kết quả chi tiết (Số phần tử = 16)

Phương thứcMeanErrorStdDevP95Gen0Gen1Gen2Cấp phát
LiteSerializer_Serialize63.19 ns1.319 ns1.760 ns65.44 ns0.0057--216 B
LiteSerializer_Serialize_Span29.10 ns0.350 ns0.467 ns29.85 ns---0 B
MemoryPack_Serialize54.13 ns0.466 ns0.622 ns54.97 ns0.0058--216 B
MemoryPack_Serialize_Span24.92 ns0.235 ns0.313 ns25.42 ns---0 B
MessagePack_Serialize89.78 ns0.686 ns0.916 ns91.29 ns0.0044--168 B
SystemTextJson_Serialize251.25 ns2.910 ns3.885 ns257.10 ns0.0143--536 B
LiteSerializer_Deserialize69.28 ns3.914 ns5.224 ns76.09 ns0.0108--408 B
MemoryPack_Deserialize75.13 ns4.133 ns5.518 ns80.58 ns0.0117--440 B
MessagePack_Deserialize162.24 ns1.204 ns1.566 ns164.84 ns0.0117--440 B
SystemTextJson_Deserialize508.44 ns5.618 ns7.500 ns520.34 ns0.0267--1008 B

Kết quả chi tiết (Số phần tử = 128)

Phương thứcMeanErrorStdDevP95Gen0Gen1Gen2Cấp phát
LiteSerializer_Serialize120.74 ns1.404 ns1.825 ns123.45 ns0.0176--664 B
LiteSerializer_Serialize_Span31.85 ns0.314 ns0.409 ns32.65 ns---0 B
MemoryPack_Serialize101.30 ns5.116 ns6.830 ns107.10 ns0.0178--664 B
MemoryPack_Serialize_Span28.65 ns0.239 ns0.311 ns29.24 ns---0 B
MessagePack_Serialize380.82 ns2.692 ns3.501 ns386.04 ns0.0134--504 B
SystemTextJson_Serialize785.81 ns6.164 ns8.229 ns800.89 ns0.0277--1056 B
LiteSerializer_Deserialize115.40 ns6.307 ns8.419 ns124.23 ns0.0229--856 B
MemoryPack_Deserialize118.78 ns2.049 ns2.516 ns121.88 ns0.0237--888 B
MessagePack_Deserialize934.29 ns5.249 ns7.007 ns945.56 ns0.0229--888 B
SystemTextJson_Deserialize2,112.12 ns18.254 ns24.369 ns2,152.67 ns0.0496--1976 B

Kết quả chi tiết (Số phần tử = 1024)

Phương thứcMeanErrorStdDevP95Gen0Gen1Gen2Cấp phát
LiteSerializer_Serialize538.97 ns5.757 ns7.686 ns549.54 ns0.1163--4280 B
LiteSerializer_Serialize_Span57.31 ns0.456 ns0.609 ns58.36 ns---0 B
MemoryPack_Serialize406.91 ns23.217 ns30.994 ns431.30 ns0.1116--4248 B
MemoryPack_Serialize_Span54.11 ns0.367 ns0.489 ns54.86 ns---0 B
MessagePack_Serialize2,536.02 ns18.638 ns24.881 ns2,573.17 ns0.0839--3192 B
SystemTextJson_Serialize5,184.75 ns42.813 ns57.153 ns5,269.06 ns0.1602--5968 B
LiteSerializer_Deserialize423.75 ns9.611 ns12.830 ns446.78 ns0.1206-0.00054440 B
MemoryPack_Deserialize448.05 ns16.775 ns21.812 ns484.71 ns0.1206--4472 B
MessagePack_Deserialize7,083.24 ns45.454 ns60.680 ns7,172.78 ns0.1144--4472 B
SystemTextJson_Deserialize15,276.89 ns115.989 ns154.842 ns15,524.26 ns0.2441--9216 B

Điểm chính

  • LiteSerializer so với MemoryPack: LiteSerializer cực kỳ nhanh và dẫn trước MemoryPack ở giải tuần tự hóa trên mọi kích thước payload được kiểm tra:
    • Giải tuần tự hóa: LiteSerializer vượt MemoryPack ở mọi quy mô (69.28 ns so với 75.13 ns với 16 phần tử; 115.40 ns so với 118.78 ns với 128 phần tử; 423.75 ns so với 448.05 ns với 1024 phần tử).
    • Tuần tự hóa: LiteSerializer_Serialize_Span không cấp phát heap (0 B) và chạy gần như tương đương MemoryPack_Serialize_Span (29.10 ns so với 24.92 ns ở 16; 31.85 ns so với 28.65 ns ở 128; 57.31 ns so với 54.11 ns ở 1024).
  • MessagePack và JSON: LiteSerializer vượt trội đáng kể so với MessagePack (nhanh hơn 3x–16x) và System.Text.Json (nhanh hơn 8x–36x), đồng thời giảm mạnh việc cấp phát bộ nhớ.