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; }