From 9973b6be127491b07b682b24c04bbcb9382c68f4 Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 16 Feb 2026 18:13:14 +0100 Subject: [PATCH] Update string serialization to always write length prefix - Always write length prefix before ASCII and UTF-8 strings in AcBinarySerializer for consistency and correctness. - Increase release warmup iterations from 2000 to 3000 in Program.cs. --- AyCode.Core.Serializers.Console/Program.cs | 2 +- .../Binaries/AcBinarySerializer.BinarySerializationContext.cs | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/AyCode.Core.Serializers.Console/Program.cs b/AyCode.Core.Serializers.Console/Program.cs index 3976efa..92129ad 100644 --- a/AyCode.Core.Serializers.Console/Program.cs +++ b/AyCode.Core.Serializers.Console/Program.cs @@ -49,7 +49,7 @@ public static class Program private static int WarmupIterations = 5; private static int TestIterations = 10; #else - private static int WarmupIterations = 2000; + private static int WarmupIterations = 3000; private static int TestIterations = 1000; //private static int WarmupIterations = 5000; diff --git a/AyCode.Core/Serializers/Binaries/AcBinarySerializer.BinarySerializationContext.cs b/AyCode.Core/Serializers/Binaries/AcBinarySerializer.BinarySerializationContext.cs index 1cb9a79..8cfe96e 100644 --- a/AyCode.Core/Serializers/Binaries/AcBinarySerializer.BinarySerializationContext.cs +++ b/AyCode.Core/Serializers/Binaries/AcBinarySerializer.BinarySerializationContext.cs @@ -487,6 +487,7 @@ public static partial class AcBinarySerializer // Single-pass Ascii.FromUtf16 (scan+copy combined) instead of // Ascii.IsValid (scan) + Ascii.FromUtf16 (scan+copy) = double traversal var savedPosition = _position; + WriteVarUInt((uint)charLength); EnsureCapacity(charLength); @@ -500,8 +501,10 @@ public static partial class AcBinarySerializer // FromUtf16 fails fast on first non-ASCII char, so speculative cost is minimal _position = savedPosition; var byteCount = Utf8NoBom.GetByteCount(value); + WriteVarUInt((uint)byteCount); EnsureCapacity(byteCount); + Utf8NoBom.GetBytes(value.AsSpan(), _buffer.AsSpan(_position, byteCount)); _position += byteCount; }