AyCode.Core/AyCode.Benchmark
Loretta 2d04b9f8f6 Zero-copy SignalR: direct object response, no SignalData
Major overhaul for SignalR response pipeline:
- All deserialization now uses byte[] (offset/length) for zero-copy, allocation-free operation; all span/memory overloads removed.
- SignalR protocol sends (signalParams, object) directly; SignalData envelope and related logic removed.
- Server sets SignalParams.SignalDataType so protocol deserializes to the correct runtime type on the client.
- SignalResponseDataMessage now only used for client request/response tracking and stream path; RawResponseData holds the actual object.
- All extension methods, helpers, and infrastructure updated to use new byte[]-based APIs.
- AcSignalRDataSource and all test/benchmark code updated for new object flow.
- Removes all diagnostics, logging, and error handling related to binary envelopes.
- Enables true zero-copy, type-safe, allocation-free SignalR response handling.
2026-04-06 22:45:00 +02:00
..
AyCode.Benchmark.csproj Update dependencies and expand README documentation 2026-03-20 16:42:51 +01:00
JitDisassemblyBenchmark.cs Optimize serializer with write plan for interning & refs 2026-02-15 17:28:06 +01:00
Program.cs Zero-copy SignalR: direct object response, no SignalData 2026-04-06 22:45:00 +02:00
README.md Document AcBinary wire format, sync docs, update conventions 2026-03-29 09:11:57 +02:00
RefForeachBenchmark.cs Refactor serialization infra, add perf benchmarks 2025-12-30 19:29:39 +01:00
SerializationBenchmarks.cs Zero-copy SignalR: direct object response, no SignalData 2026-04-06 22:45:00 +02:00
SignalRCommunicationBenchmarks.cs Refactor: Add high-perf JSON serializer & merge support 2025-12-14 19:34:49 +01:00
SignalRRoundTripBenchmarks.cs Zero-copy SignalR: direct object response, no SignalData 2026-04-06 22:45:00 +02:00
SourceGeneratorBenchmarks.cs Refactor serializer options, string fast paths & analysis 2026-01-25 16:40:40 +01:00
TaskHelperBenchmarks.cs Rename BenchmarkSuite1 to AyCode.Benchmark project 2025-12-13 10:11:39 +01:00
ValueTypePassingBenchmark.cs Refactor serialization infra, add perf benchmarks 2025-12-30 19:29:39 +01:00

README.md

AyCode.Benchmark

BenchmarkDotNet-based performance benchmarking console app. Compares AcBinary serializer against MessagePack, BSON, and JSON across various scenarios.

Key Files

  • Program.cs — CLI entry point with --quick, --test, --minimal, --simple, --complex, --msgpack, --sizes, --jitasm modes. Collects results to Test_Benchmark_Results/ at solution root.
  • SerializationBenchmarks.cs — Primary suite: MinimalBenchmark, SimpleBinaryBenchmark, ComplexBinaryBenchmark, MessagePackComparisonBenchmark, AcBinaryVsMessagePackFullBenchmark, SizeComparisonBenchmark, LargeScaleBenchmark (~25K objects), AcJsonVsSystemTextJsonBenchmark.
  • SourceGeneratorBenchmarks.cs — Source-generated vs runtime reflection serializers. Includes PureContractlessBenchmark, SourceGeneratorVsRuntimeBenchmark, RepeatedStringBenchmark (string interning).
  • SignalRCommunicationBenchmarks.cs — Full-stack SignalR message performance: client creation → MessagePack serialization → server deserialization → response → round-trip.
  • SignalRRoundTripBenchmarks.cs — Real SignalR infrastructure benchmarks: primitives, complex objects, collections, mixed parameters.
  • JitDisassemblyBenchmark.cs — JIT analysis: generates .asm files to verify inlining decisions on serialize/deserialize hot paths.
  • TaskHelperBenchmarks.cs — Task/timing utilities: WaitToAsync, ThreadPool (custom vs Task.Run), timing methods (UtcNow.Ticks vs TickCount64).
  • RefForeachBenchmark.cs — Collection iteration patterns: array vs list, foreach vs index, ref readonly vs by-value for large structs.
  • ValueTypePassingBenchmark.cs — Copy-by-value vs in parameter for 16-byte types (Decimal, DateTimeOffset, Guid).

Dependencies

Dependency Purpose
BenchmarkDotNet Benchmarking framework
MessagePack Serialization comparison target
MongoDB.Bson BSON comparison target