AyCode.Core/AyCode.Core.Serializers.Con...
Loretta 204b361748 [LOADED_DOCS: 3 files, no new loads]
Refactor AcBinary streaming: multi-message protocol

- Renamed framing flags to multiMessage for clarity in AsyncPipeReaderInput/AsyncPipeWriterOutput.
- Multi-message mode ([202]=end-of-message) now auto-resets input for reuse; session end is explicit.
- Updated framing state machine, buffer cycling, and sentinel logic.
- Revised all serializer/deserializer entry points and tests for new protocol.
- Expanded docs and XML comments to detail wire format and protocol constraints.
- Updated benchmarks and tests for new streaming API and multi-message behavior.
- Documented protocol limits and added security issue/TODO for type-name deserialization in SignalR binary protocol.
2026-04-30 19:58:30 +02:00
..
AyCode.Core.Serializers.Console.csproj Add MemoryPack benchmarks and model support 2026-02-16 07:59:24 +01:00
Program.cs [LOADED_DOCS: 3 files, no new loads] 2026-04-30 19:58:30 +02:00
README.md Document AcBinary wire format, sync docs, update conventions 2026-03-29 09:11:57 +02:00

README.md

AyCode.Core.Serializers.Console

Standalone benchmark console application for comparing serializer performance. Targets .NET 9. Measures serialize/deserialize speed, output size, and compression across multiple serializers and data shapes.

Compared Serializers

  • AcBinary — Multiple configurations: Default, NoRef, FastMode, NoIntern, with/without source generation
  • MessagePack
  • MemoryPack

(System.Text.Json and Newtonsoft.Json comparisons exist but are currently commented out.)

Key Files

  • Program.cs — Benchmark runner. Modes: all (default), quick (fewer iterations), serialize, deserialize, profiler (memory profiler warmup). Outputs results to Test_Benchmark_Results/Benchmark/. Iterations: 5000 warmup + 1000 test (Release), 0+1 (Debug).
  • BenchmarkTestDataProvider.cs — Test data factory producing 5 data shapes:
    • Small (2x2x2x2), Medium (3x3x3x4), Large (5x5x5x10)
    • Repeated Strings (10 items, string deduplication testing)
    • Deep Nested (2x4x4x8, depth stress test)
    • Uses TestOrder model from AyCode.Core.Tests with configurable IId reference percentages.

Dependencies

Dependency Purpose
AyCode.Core Core library with AcBinary serializer
AyCode.Core.Tests Test models (TestOrder, TestDataFactory, etc.)
MemoryPack Competitor benchmark
MessagePack Competitor benchmark
Newtonsoft.Json Competitor benchmark