diff --git a/AyCode.Core/Serializers/AcSerializerCommon.cs b/AyCode.Core/Serializers/AcSerializerCommon.cs index 7bfd6ca..2720a24 100644 --- a/AyCode.Core/Serializers/AcSerializerCommon.cs +++ b/AyCode.Core/Serializers/AcSerializerCommon.cs @@ -681,8 +681,8 @@ public static class AcSerializerCommon /// public sealed class SerializationReferenceTracker { - private const int InitialReferenceCapacity = 16; - private const int InitialMultiRefCapacity = 8; + private const int InitialReferenceCapacity = 64; + private const int InitialMultiRefCapacity = 32; private Dictionary? _scanOccurrences; private Dictionary? _writtenRefs; @@ -982,7 +982,7 @@ public static class AcSerializerCommon [MethodImpl(MethodImplOptions.AggressiveInlining)] public void RegisterObject(int id, object obj) { - _idToObject ??= new Dictionary(8); + _idToObject ??= new Dictionary(64); _idToObject[id] = obj; } diff --git a/AyCode.Core/Serializers/Binaries/AcBinarySerializer.cs b/AyCode.Core/Serializers/Binaries/AcBinarySerializer.cs index 27ac81c..a0aa98f 100644 --- a/AyCode.Core/Serializers/Binaries/AcBinarySerializer.cs +++ b/AyCode.Core/Serializers/Binaries/AcBinarySerializer.cs @@ -228,10 +228,9 @@ public static partial class AcBinarySerializer var metadata = GetTypeMetadata(type); var properties = metadata.Properties; - // Use Span-based iteration to avoid struct copying for (var i = 0; i < properties.Length; i++) { - ref readonly var prop = ref properties[i]; + var prop = properties[i]; if (!context.ShouldSerializeProperty(value, prop)) { diff --git a/AyCode.Core/Serializers/Jsons/AcJsonDeserializer.JsonElement.cs b/AyCode.Core/Serializers/Jsons/AcJsonDeserializer.JsonElement.cs index 3522569..706fe3c 100644 --- a/AyCode.Core/Serializers/Jsons/AcJsonDeserializer.JsonElement.cs +++ b/AyCode.Core/Serializers/Jsons/AcJsonDeserializer.JsonElement.cs @@ -112,8 +112,10 @@ public static partial class AcJsonDeserializer /// private static void CopyPropertiesJson(object source, object target, JsonDeserializeTypeMetadata metadata) { - foreach (var prop in metadata.PropertiesArray) + var props = metadata.PropertiesArray; + for (var i = 0; i < props.Length; i++) { + var prop = props[i]; var value = prop.GetValue(source); if (value != null) prop.SetValue(target, value); diff --git a/AyCode.Core/Serializers/ReferenceTracker.cs b/AyCode.Core/Serializers/ReferenceTracker.cs index dd9fe1f..6ebb2fa 100644 --- a/AyCode.Core/Serializers/ReferenceTracker.cs +++ b/AyCode.Core/Serializers/ReferenceTracker.cs @@ -98,7 +98,7 @@ public sealed class DeserializationReferenceTracker [MethodImpl(MethodImplOptions.AggressiveInlining)] public void RegisterObject(string id, object obj) { - _idToObject ??= new Dictionary(8, StringComparer.Ordinal); + _idToObject ??= new Dictionary(64, StringComparer.Ordinal); _idToObject[id] = obj; }