Extract ISerializerBenchmark to its own file Moved ISerializerBenchmark from Program.cs to a new ISerializerBenchmark.cs file under the AyCode.Core.Serializers.Console.Benchmarks namespace. Updated all benchmark classes in Program.cs to implement the interface from the new namespace and made them internal. Added the necessary using directive to Program.cs. Adjusted a PowerShell script in settings.local.json to ensure the new using is present. Removed the old interface definition from Program.cs. |
||
|---|---|---|
| .. | ||
| Benchmarks | ||
| AyCode.Core.Serializers.Console.csproj | ||
| BenchmarkLoop.cs | ||
| BenchmarkResult.cs | ||
| Configuration.cs | ||
| Menu.cs | ||
| Output.cs | ||
| Program.cs | ||
| README.md | ||
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. Outputs results toTest_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
TestOrdermodel fromAyCode.Core.Testswith 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 |