From d8a92ff7d3b196b298e44ff210afb4fed9fec31d Mon Sep 17 00:00:00 2001 From: Aliaksandr Kukrash Date: Tue, 30 Jul 2024 00:30:56 +0400 Subject: [PATCH 1/2] Add deep object tree serialization benchmarks --- .../RecursiveBenchmarkTests.cs | 104 +++++++ .../Models/CreateDataExtensions.cs | 38 +++ .../Models/ProtobufRecursiveDataItem.cs | 281 ++++++++++++++++++ .../Models/ProtobufRecursiveDataItem.proto | 11 + .../Models/RecursiveDataItem.cs | 32 ++ SerializersBenchmark/RecursiveBenchmarks.cs | 83 ++++++ .../Serializers/SystemTextJsonSourceGen.cs | 1 + 7 files changed, 550 insertions(+) create mode 100644 SerializerBenchmarks.UnitTests/RecursiveBenchmarkTests.cs create mode 100644 SerializersBenchmark/Models/ProtobufRecursiveDataItem.cs create mode 100644 SerializersBenchmark/Models/ProtobufRecursiveDataItem.proto create mode 100644 SerializersBenchmark/Models/RecursiveDataItem.cs create mode 100644 SerializersBenchmark/RecursiveBenchmarks.cs diff --git a/SerializerBenchmarks.UnitTests/RecursiveBenchmarkTests.cs b/SerializerBenchmarks.UnitTests/RecursiveBenchmarkTests.cs new file mode 100644 index 0000000..72bf398 --- /dev/null +++ b/SerializerBenchmarks.UnitTests/RecursiveBenchmarkTests.cs @@ -0,0 +1,104 @@ +using SerializersBenchmark; +using SerializersBenchmark.Models; +using SerializersBenchmark.Serializers; +using Xunit; + +namespace SerializerBenchmarks.UnitTests; + +public class RecursiveBenchmarkTests +{ + [Fact] + public void SetupTest() + { + RecursiveBenchmarks benchmark = new() + { + N = 1, + SerializerType = typeof(MessagePack) + }; + benchmark.Setup(); + Assert.NotNull(benchmark.SerializerTest); + Assert.NotNull(benchmark.SerializedValue); + Assert.NotEqual(0, benchmark.SerializedValue.Length); + } + + [Theory] + [InlineData(typeof(Ceras))] + [InlineData(typeof(Utf8JsonSerializer))] + [InlineData(typeof(MessagePack))] + [InlineData(typeof(GroBuf))] + [InlineData(typeof(Bois))] + [InlineData(typeof(BoisLz4))] + [InlineData(typeof(Jil))] + [InlineData(typeof(ProtobufNet))] + [InlineData(typeof(GoogleProtobuf))] + [InlineData(typeof(ServiceStack))] + [InlineData(typeof(FastJson))] + [InlineData(typeof(DataContractBinaryXml))] + [InlineData(typeof(DataContract))] + [InlineData(typeof(XmlSerializer))] + [InlineData(typeof(NewtonsoftJson))] + [InlineData(typeof(MsgPackCli))] + [InlineData(typeof(MsgPackCliDefaultAsync))] + [InlineData(typeof(SystemTextJson))] +#if (NET6_0_OR_GREATER) + [InlineData(typeof(MemoryPack))] + //[InlineData(typeof(BinaryPack))] - doesn't work with recursive type references + [InlineData(typeof(SpanJson))] + [InlineData(typeof(SystemTextJsonSourceGen))] +#endif +#if NET48 + [InlineData(typeof(BinaryFormatter))] +#endif + public void SerializeTest(Type serializerType) + { + RecursiveBenchmarks benchmark = new() + { + N = 1, + SerializerType = serializerType, + }; + benchmark.Setup(); + var stream = benchmark.Serialize(); + Assert.NotNull(stream); + Assert.NotEqual(0, stream.Length); + } + + [Theory] + [InlineData(typeof(Ceras))] + [InlineData(typeof(Utf8JsonSerializer))] + [InlineData(typeof(MessagePack))] + [InlineData(typeof(GroBuf))] + [InlineData(typeof(Bois))] + [InlineData(typeof(BoisLz4))] + [InlineData(typeof(Jil))] + [InlineData(typeof(ProtobufNet))] + [InlineData(typeof(GoogleProtobuf))] + [InlineData(typeof(ServiceStack))] + [InlineData(typeof(FastJson))] + [InlineData(typeof(DataContractBinaryXml))] + [InlineData(typeof(DataContract))] + [InlineData(typeof(XmlSerializer))] + [InlineData(typeof(NewtonsoftJson))] + [InlineData(typeof(MsgPackCli))] + [InlineData(typeof(MsgPackCliDefaultAsync))] + [InlineData(typeof(SystemTextJson))] +#if (NET6_0_OR_GREATER) + [InlineData(typeof(MemoryPack))] + //[InlineData(typeof(BinaryPack))] - doesn't work with recursive type references + [InlineData(typeof(SpanJson))] + [InlineData(typeof(SystemTextJsonSourceGen))] +#endif +#if NET48 + [InlineData(typeof(BinaryFormatter))] +#endif + public void DeserializeTest(Type serializerType) + { + RecursiveBenchmarks benchmark = new() + { + N = 1, + SerializerType = serializerType, + }; + benchmark.Setup(); + var value = benchmark.Deserialize(); + Assert.NotNull(value); + } +} \ No newline at end of file diff --git a/SerializersBenchmark/Models/CreateDataExtensions.cs b/SerializersBenchmark/Models/CreateDataExtensions.cs index d8d6a97..eb36aa0 100644 --- a/SerializersBenchmark/Models/CreateDataExtensions.cs +++ b/SerializersBenchmark/Models/CreateDataExtensions.cs @@ -4,6 +4,44 @@ namespace SerializersBenchmark.Models; public static class CreateDataExtensions { + public static RecursiveDataItem RecursiveData(int itemsToCreate) + { + var result = new RecursiveDataItem + { + Text = "Level 0" + }; + var current = result; + for (var i = 0; i < itemsToCreate; i++) + { + current.Next = new RecursiveDataItem() + { + Text = $"Level {i + 1}" + }; + current = current.Next; + } + + return result; + } + + public static ProtobufRecursiveDataItem ProtobufRecursiveData(int itemsToCreate) + { + var result = new ProtobufRecursiveDataItem + { + Text = $"Level 0" + }; + var current = result; + for (var i = 0; i < itemsToCreate; i++) + { + current.Next = new ProtobufRecursiveDataItem + { + Text = $"Level {i + 1}" + }; + current = current.Next; + } + + return result; + } + public static DataItem Data(int itemsToCreate) { return new DataItem("private value") diff --git a/SerializersBenchmark/Models/ProtobufRecursiveDataItem.cs b/SerializersBenchmark/Models/ProtobufRecursiveDataItem.cs new file mode 100644 index 0000000..c7c4a28 --- /dev/null +++ b/SerializersBenchmark/Models/ProtobufRecursiveDataItem.cs @@ -0,0 +1,281 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: ProtobufRecursiveDataItem.proto +// +#pragma warning disable 1591, 0612, 3021, 8981 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace SerializersBenchmark.Models { + + /// Holder for reflection information generated from ProtobufRecursiveDataItem.proto + public static partial class ProtobufRecursiveDataItemReflection { + + #region Descriptor + /// File descriptor for ProtobufRecursiveDataItem.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static ProtobufRecursiveDataItemReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "Ch9Qcm90b2J1ZlJlY3Vyc2l2ZURhdGFJdGVtLnByb3RvIlMKGVByb3RvYnVm", + "UmVjdXJzaXZlRGF0YUl0ZW0SKAoETmV4dBgBIAEoCzIaLlByb3RvYnVmUmVj", + "dXJzaXZlRGF0YUl0ZW0SDAoEVGV4dBgCIAEoCUIeqgIbU2VyaWFsaXplcnNC", + "ZW5jaG1hcmsuTW9kZWxzYgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::SerializersBenchmark.Models.ProtobufRecursiveDataItem), global::SerializersBenchmark.Models.ProtobufRecursiveDataItem.Parser, new[]{ "Next", "Text" }, null, null, null, null) + })); + } + #endregion + + } + #region Messages + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ProtobufRecursiveDataItem : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ProtobufRecursiveDataItem()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::SerializersBenchmark.Models.ProtobufRecursiveDataItemReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ProtobufRecursiveDataItem() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ProtobufRecursiveDataItem(ProtobufRecursiveDataItem other) : this() { + next_ = other.next_ != null ? other.next_.Clone() : null; + text_ = other.text_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ProtobufRecursiveDataItem Clone() { + return new ProtobufRecursiveDataItem(this); + } + + /// Field number for the "Next" field. + public const int NextFieldNumber = 1; + private global::SerializersBenchmark.Models.ProtobufRecursiveDataItem next_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::SerializersBenchmark.Models.ProtobufRecursiveDataItem Next { + get { return next_; } + set { + next_ = value; + } + } + + /// Field number for the "Text" field. + public const int TextFieldNumber = 2; + private string text_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string Text { + get { return text_; } + set { + text_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ProtobufRecursiveDataItem); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ProtobufRecursiveDataItem other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Next, other.Next)) return false; + if (Text != other.Text) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (next_ != null) hash ^= Next.GetHashCode(); + if (Text.Length != 0) hash ^= Text.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (next_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Next); + } + if (Text.Length != 0) { + output.WriteRawTag(18); + output.WriteString(Text); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (next_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Next); + } + if (Text.Length != 0) { + output.WriteRawTag(18); + output.WriteString(Text); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (next_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Next); + } + if (Text.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Text); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ProtobufRecursiveDataItem other) { + if (other == null) { + return; + } + if (other.next_ != null) { + if (next_ == null) { + Next = new global::SerializersBenchmark.Models.ProtobufRecursiveDataItem(); + } + Next.MergeFrom(other.Next); + } + if (other.Text.Length != 0) { + Text = other.Text; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (next_ == null) { + Next = new global::SerializersBenchmark.Models.ProtobufRecursiveDataItem(); + } + input.ReadMessage(Next); + break; + } + case 18: { + Text = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (next_ == null) { + Next = new global::SerializersBenchmark.Models.ProtobufRecursiveDataItem(); + } + input.ReadMessage(Next); + break; + } + case 18: { + Text = input.ReadString(); + break; + } + } + } + } + #endif + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/SerializersBenchmark/Models/ProtobufRecursiveDataItem.proto b/SerializersBenchmark/Models/ProtobufRecursiveDataItem.proto new file mode 100644 index 0000000..3fb1067 --- /dev/null +++ b/SerializersBenchmark/Models/ProtobufRecursiveDataItem.proto @@ -0,0 +1,11 @@ +// https://github.com/protocolbuffers/protobuf/releases +// protoc --csharp_out= --proto_path= ProtobufDataItem.proto + +syntax = "proto3"; + +option csharp_namespace = "SerializersBenchmark.Models"; + +message ProtobufRecursiveDataItem { + ProtobufRecursiveDataItem Next = 1; + string Text = 2; +} \ No newline at end of file diff --git a/SerializersBenchmark/Models/RecursiveDataItem.cs b/SerializersBenchmark/Models/RecursiveDataItem.cs new file mode 100644 index 0000000..b0270c3 --- /dev/null +++ b/SerializersBenchmark/Models/RecursiveDataItem.cs @@ -0,0 +1,32 @@ +using System.Runtime.Serialization; +#if NET6_0_OR_GREATER +using BinaryPack.Attributes; +using BinaryPack.Enums; +using MemoryPack; +#endif +using MessagePack; +using ProtoBuf; + +namespace SerializersBenchmark.Models; + +[Serializable, DataContract, ProtoContract, MessagePackObject +#if NET6_0_OR_GREATER + , MemoryPackable, BinarySerialization(SerializationMode.Properties | SerializationMode.NonPublicMembers) +#endif +] +public partial class RecursiveDataItem +{ + [DataMember, ProtoMember(1), Key(0)] + public RecursiveDataItem Next { get; set; } + + [DataMember, ProtoMember(2), Key(1)] + public string Text { get; set; } + +#if NET6_0_OR_GREATER + [MemoryPackConstructor] +#endif + public RecursiveDataItem() + { + + } +} \ No newline at end of file diff --git a/SerializersBenchmark/RecursiveBenchmarks.cs b/SerializersBenchmark/RecursiveBenchmarks.cs new file mode 100644 index 0000000..26da771 --- /dev/null +++ b/SerializersBenchmark/RecursiveBenchmarks.cs @@ -0,0 +1,83 @@ +using System.Runtime.CompilerServices; +using BenchmarkDotNet.Attributes; +using SerializersBenchmark.Base; +using SerializersBenchmark.Models; +using SerializersBenchmark.Serializers; +[assembly:InternalsVisibleTo("SerializerBenchmarks.UnitTests")] + +namespace SerializersBenchmark; + +[RPlotExporter] +[MemoryDiagnoser] +[ExceptionDiagnoser] +public class RecursiveBenchmarks +{ + [Params(1, 100, 500, 10_000, 200_000)] + public int N { get; set; } + + [Params( + typeof(Ceras), + typeof(Utf8JsonSerializer), + typeof(MessagePack), + typeof(GroBuf), + typeof(Bois), + typeof(BoisLz4), + typeof(Jil), + typeof(ProtobufNet), + typeof(GoogleProtobuf), + typeof(ServiceStack), + typeof(FastJson), + typeof(DataContractBinaryXml), + typeof(DataContract), + typeof(XmlSerializer), + typeof(NewtonsoftJson), + typeof(MsgPackCli), + typeof(SystemTextJson) +#if (NET6_0_OR_GREATER) + ,typeof(MemoryPack), + //typeof(BinaryPack), - doesn't work with recursive type references + typeof(SpanJson), + typeof(SystemTextJsonSourceGen) +#endif +#if NET48 + ,typeof(BinaryFormatter) +#endif + )] + public Type SerializerType { get; set; } + + internal ISerializerTest SerializerTest => _serializer; + internal MemoryStream SerializedValue => _serializedValue; + + private ISerializerTestAsync _serializer; + private MemoryStream _serializedValue; + + + [GlobalSetup] + public void Setup() + { + if (SerializerType != typeof(GoogleProtobuf)) + { + _serializer = (ISerializerTestAsync) Activator.CreateInstance(SerializerType, + (Func) CreateDataExtensions.RecursiveData); + } + else + { + _serializer = (ISerializerTestAsync) Activator.CreateInstance(SerializerType, + (Func) CreateDataExtensions.ProtobufRecursiveData); + } + _serializedValue = _serializer!.Setup(N); + } + + [Benchmark] + public MemoryStream Serialize() + { + return _serializer.Serialize(_serializer.TestDataObject); + } + + [Benchmark] + public object Deserialize() + { + _serializedValue.Position = 0; + return _serializer.Deserialize(_serializedValue); + } +} \ No newline at end of file diff --git a/SerializersBenchmark/Serializers/SystemTextJsonSourceGen.cs b/SerializersBenchmark/Serializers/SystemTextJsonSourceGen.cs index 474d4b0..63a6ed9 100644 --- a/SerializersBenchmark/Serializers/SystemTextJsonSourceGen.cs +++ b/SerializersBenchmark/Serializers/SystemTextJsonSourceGen.cs @@ -9,6 +9,7 @@ namespace SerializersBenchmark.Serializers { [JsonSourceGenerationOptions(GenerationMode = JsonSourceGenerationMode.Default, IncludeFields = true)] [JsonSerializable(typeof(DataItem))] + [JsonSerializable(typeof(RecursiveDataItem))] internal partial class MyJsonContext : JsonSerializerContext { } From 6cad2d24de4179377e3fb6b6dba51f8c9e7572c4 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kukrash Date: Tue, 30 Jul 2024 01:07:31 +0400 Subject: [PATCH 2/2] Upgrade packages --- .github/workflows/dotnet.yml | 38 ++- .../SerializerBenchmarks.UnitTests.csproj | 6 +- .../packages.lock.json | 296 +++++++++--------- .../SerializersBenchmark.csproj | 15 +- SerializersBenchmark/packages.lock.json | 98 +++--- 5 files changed, 242 insertions(+), 211 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 2ad5b04..67ddaed 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -64,7 +64,7 @@ jobs: strategy: matrix: target: [net48, net6.0, net8.0] - benchmarkSet: [SerializersBenchmark.AsyncBenchmarks*, SerializersBenchmark.Benchmarks*] + benchmarkSet: [SerializersBenchmark.AsyncBenchmarks*, SerializersBenchmark.Benchmarks*, SerializersBenchmark.RecursiveBenchmarks*] if: ${{ github.ref == 'refs/heads/main' }} steps: - uses: actions/checkout@v4 @@ -86,7 +86,41 @@ jobs: - name: Publish Results uses: actions/upload-artifact@v4 with: - name: ${{matrix.target}}${{ matrix.benchmarkSet == 'SerializersBenchmark.AsyncBenchmarks*' && '-async' || '' }} + name: ${{matrix.target}}${{ matrix.benchmarkSet == 'SerializersBenchmark.AsyncBenchmarks*' && '-async' || (matrix.benchmarkSet == 'SerializersBenchmark.RecursiveBenchmarks*' && '-recursive' || '') }} + path: ./SerializersBenchmark/BenchmarkDotNet.Artifacts/results + compression-level: 9 + + benchmark-linux: + + runs-on: ubuntu-latest + timeout-minutes: 320 #6 hours + needs: build-linux + strategy: + matrix: + target: [net6.0, net8.0] + benchmarkSet: [SerializersBenchmark.AsyncBenchmarks*, SerializersBenchmark.Benchmarks*, SerializersBenchmark.RecursiveBenchmarks*] + if: ${{ github.ref == 'refs/heads/main' }} + steps: + - uses: actions/checkout@v4 + - name: Setup .NET 6 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 6.0.x + - name: Setup .NET 8 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + - name: Restore dependencies + run: dotnet restore + - name: Build + run: dotnet build --no-restore -f ${{matrix.target}} + - name: Execute + working-directory: ./SerializersBenchmark + run: dotnet run -c Release -f ${{matrix.target}} -- --job default --runtimes ${{matrix.target}} --filter ${{matrix.benchmarkSet}} + - name: Publish Results + uses: actions/upload-artifact@v4 + with: + name: ${{matrix.target}}${{ matrix.benchmarkSet == 'SerializersBenchmark.AsyncBenchmarks*' && '-async' || (matrix.benchmarkSet == 'SerializersBenchmark.RecursiveBenchmarks*' && '-recursive' || '') }} path: ./SerializersBenchmark/BenchmarkDotNet.Artifacts/results compression-level: 9 diff --git a/SerializerBenchmarks.UnitTests/SerializerBenchmarks.UnitTests.csproj b/SerializerBenchmarks.UnitTests/SerializerBenchmarks.UnitTests.csproj index b70b54e..7feb0f7 100644 --- a/SerializerBenchmarks.UnitTests/SerializerBenchmarks.UnitTests.csproj +++ b/SerializerBenchmarks.UnitTests/SerializerBenchmarks.UnitTests.csproj @@ -18,9 +18,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/SerializerBenchmarks.UnitTests/packages.lock.json b/SerializerBenchmarks.UnitTests/packages.lock.json index cb828f8..ca79583 100644 --- a/SerializerBenchmarks.UnitTests/packages.lock.json +++ b/SerializerBenchmarks.UnitTests/packages.lock.json @@ -13,31 +13,31 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[17.9.0, )", - "resolved": "17.9.0", - "contentHash": "7GUNAUbJYn644jzwLm5BD3a2p9C1dmP8Hr6fDPDxgItQk9hBs1Svdxzz07KQ/UphMSmgza9AbijBJGmw5D658A==", + "requested": "[17.10.0, )", + "resolved": "17.10.0", + "contentHash": "0/2HeACkaHEYU3wc83YlcD2Fi4LMtECJjqrtvw0lPi9DCEa35zSPt1j4fuvM8NagjDqJuh1Ja35WcRtn1Um6/A==", "dependencies": { - "Microsoft.CodeCoverage": "17.9.0" + "Microsoft.CodeCoverage": "17.10.0" } }, "xunit": { "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "US3a3twJziAif1kFPGdk9fALwILHxV0n1roX5j67bN/d3o4DGNLHnV3tr5ZX+uinVrzfkf0avH3zGX8JPBC0qA==", + "requested": "[2.9.0, )", + "resolved": "2.9.0", + "contentHash": "PtU3rZ0ThdmdJqTbK7GkgFf6iBaCR6Q0uvJHznID+XEYk2v6O/b7sRxqnbi3B2gRDXxjTqMkVNayzwsqsFUxRw==", "dependencies": { - "xunit.analyzers": "1.13.0", - "xunit.assert": "2.8.0", - "xunit.core": "[2.8.0]" + "xunit.analyzers": "1.15.0", + "xunit.assert": "2.9.0", + "xunit.core": "[2.9.0]" } }, "xunit.runner.visualstudio": { "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "mqQbS2zr8dfgSWxkNOC6UTzO8JoqpTmM5+FFn2XR/2nVmx2JvEY0YbM5pt2FmXVg9YVe+jKUPHd6KrroyCl67w==", + "requested": "[2.8.2, )", + "resolved": "2.8.2", + "contentHash": "vm1tbfXhFmjFMUmS4M0J0ASXz3/U5XvXBa6DOQUL3fEz4Vt6YPhv+ESCarx6M6D+9kJkJYZKCNvJMas1+nVfmQ==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.9.0" + "Microsoft.TestPlatform.ObjectModel": "17.10.0" } }, "BenchmarkDotNet": { @@ -93,8 +93,8 @@ }, "Google.Protobuf": { "type": "Transitive", - "resolved": "3.26.1", - "contentHash": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==", + "resolved": "3.27.2", + "contentHash": "0wdgA3LO9mBS477jieBFs4pU1sWhVtwv/P+i9nAEiFDQyUA7PPHDBbJL1CeqYtV18jLiq9og4n7wSVCO171OBg==", "dependencies": { "System.Memory": "4.5.3" } @@ -141,23 +141,21 @@ }, "MessagePack": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==", + "resolved": "2.5.171", + "contentHash": "eX0wTFtE4teu2iDWm/eEGqvVEeO9dqaRXu6MXu1MnhQ/wBkixEjh+1SlKaSh41LL5L7WUJlK04EBpz8FSaGOqw==", "dependencies": { - "MessagePack.Annotations": "2.5.140", + "MessagePack.Annotations": "2.5.171", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", "Microsoft.NET.StringTools": "17.6.3", "System.Collections.Immutable": "6.0.0", - "System.Reflection.Emit": "4.7.0", - "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" } }, "MessagePack.Annotations": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ==" + "resolved": "2.5.171", + "contentHash": "iS5Zb6uiPn3QJVL814+xWlWeH/rW+p2qPoECjOhL7RV71ppld4vDpej5rq4YrxGdLtR66zf+AQwW919sPVMWgw==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -196,8 +194,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "RGD37ZSrratfScYXm7M0HjvxMxZyWZL4jm+XgMZbkIY1UPgjUpbNA/t+WTGj/rC/0Hm9A3IrH3ywbKZkOCnoZA==" + "resolved": "17.10.0", + "contentHash": "yC7oSlnR54XO5kOuHlVOKtxomNNN1BWXX8lK1G2jaPXT9sUok7kCOoA4Pgs0qyFaCtMrNsprztYMeoEGqCm4uA==" }, "Microsoft.CSharp": { "type": "Transitive", @@ -313,8 +311,8 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "1ilw/8vgmjLyKU+2SKXKXaOqpYFJCQfGqGz+x0cosl981VzjrY74Sv6qAJv+neZMZ9ZMxF3ArN6kotaQ4uvEBw==", + "resolved": "17.10.0", + "contentHash": "KkwhjQevuDj0aBRoPLY6OLAhGqbPUEBuKLbaCs0kUVw29qiOYncdORd4mLVJbn9vGZ7/iFGQ/+AoJl0Tu5Umdg==", "dependencies": { "System.Reflection.Metadata": "1.6.0" } @@ -395,8 +393,8 @@ }, "ServiceStack.Text": { "type": "Transitive", - "resolved": "8.2.2", - "contentHash": "2WrX0g2eN6L4SnD8lwRhy3Gcopvs/4l9LHMed67fpfcjIr/WwHhBfKANQx1BL2YZN7t4zWikxOJYsUJI5PB1Aw==", + "resolved": "8.3.0", + "contentHash": "n7o3PfhnyNq+zUQARtcI0BWx0eiIWvxMmQMCU9pvgQpkfiFN9/mrPVsolNQuX4uZ7w2AMXIv3FTdKaZUzBeRLQ==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -512,8 +510,8 @@ }, "System.Text.Json": { "type": "Transitive", - "resolved": "8.0.3", - "contentHash": "hpagS9joOwv6efWfrMmV9MjQXpiXZH72PgN067Ysfr6AWMSD1/1hEcvh/U5mUpPLezEWsOJSuVrmqDIVD958iA==", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "8.0.0", "System.Buffers": "4.5.1", @@ -555,37 +553,37 @@ }, "xunit.analyzers": { "type": "Transitive", - "resolved": "1.13.0", - "contentHash": "Pai9YnDV71/Ox14nBHB6/f62iyPyLbmUG/YYMiA4dfdFZvr0gIYE9yGxSr0i5Tr3INK75wgL2MCUNEKpeiZ2Fw==" + "resolved": "1.15.0", + "contentHash": "s+M8K/Rtlgr6CmD7AYQKrNTvT5sh0l0ZKDoZ3Z/ExhlIwfV9mGAMR4f7KqIB7SSK7ZOhqDTgTUMYPmKfmvWUWQ==" }, "xunit.assert": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "lwf7Dy5/5HbDkaPx1YrGXCByytCEEcIn+KPI74jh2BD/RU/7RhO8c+S3k0Ph+Mr7+cLf338fl+o6UcgPCLa6PA==" + "resolved": "2.9.0", + "contentHash": "Z/1pyia//860wEYTKn6Q5dmgikJdRjgE4t5AoxJkK8oTmidzPLEPG574kmm7LFkMLbH6Frwmgb750kcyR+hwoA==" }, "xunit.core": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "McSTFGTETCxLpmJKE9TWi9FtFthrRbpRrjz2V2g8sK2wRt1+JHs15vwi+B+nfftFkV9aFWIXZfzZM95TIGZNIA==", + "resolved": "2.9.0", + "contentHash": "uRaop9tZsZMCaUS4AfbSPGYHtvywWnm8XXFNUqII7ShWyDBgdchY6gyDNgO4AK1Lv/1NNW61Zq63CsDV6oH6Jg==", "dependencies": { - "xunit.extensibility.core": "[2.8.0]", - "xunit.extensibility.execution": "[2.8.0]" + "xunit.extensibility.core": "[2.9.0]", + "xunit.extensibility.execution": "[2.9.0]" } }, "xunit.extensibility.core": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "eBJv9xQeY0p5z+C/L1tFjUFYqtl5pQqIEYCGTMl+MbRzA7sOlgYKwJE//vEePBp+mgBh7NjD0Qhz0liZBYM27w==", + "resolved": "2.9.0", + "contentHash": "zjDEUSxsr6UNij4gIwCgMqQox+oLDPRZ+mubwWLci+SssPBFQD1xeRR4SvgBuXqbE0QXCJ/STVTp+lxiB5NLVA==", "dependencies": { "xunit.abstractions": "2.0.3" } }, "xunit.extensibility.execution": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "TyyrZesHB9ODZMS9c73OqiBz4x0vL944JCkSPBWW5w6PF2LlUfdfXRjjOhoIOuY6lTmEgl07rS4/Jot9mCYnpg==", + "resolved": "2.9.0", + "contentHash": "5ZTQZvmPLlBw6QzCOwM0KnMsZw6eGjbmC176QHZlcbQoMhGIeGcYzYwn5w9yXxf+4phtplMuVqTpTbFDQh2bqQ==", "dependencies": { - "xunit.extensibility.core": "[2.8.0]" + "xunit.extensibility.core": "[2.9.0]" } }, "serializersbenchmark": { @@ -593,17 +591,17 @@ "dependencies": { "BenchmarkDotNet": "[0.13.12, )", "Ceras": "[4.1.7, )", - "Google.Protobuf": "[3.26.1, )", + "Google.Protobuf": "[3.27.2, )", "GroBuf": "[1.9.2, )", "Jil": "[2.17.0, )", "MemoryPack": "[1.21.1, )", - "MessagePack": "[2.5.140, )", + "MessagePack": "[2.5.171, )", "MsgPack.Cli": "[1.0.1, )", "Newtonsoft.Json": "[13.0.3, )", "Salar.Bois": "[3.4.0, )", "Salar.Bois.LZ4": "[3.4.0, )", - "ServiceStack.Text": "[8.2.2, )", - "System.Text.Json": "[8.0.3, )", + "ServiceStack.Text": "[8.3.0, )", + "System.Text.Json": "[8.0.4, )", "Utf8Json": "[1.3.7, )", "fastJSON": "[2.4.0.4, )", "protobuf-net": "[3.2.30, )" @@ -622,30 +620,30 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[17.9.0, )", - "resolved": "17.9.0", - "contentHash": "7GUNAUbJYn644jzwLm5BD3a2p9C1dmP8Hr6fDPDxgItQk9hBs1Svdxzz07KQ/UphMSmgza9AbijBJGmw5D658A==", + "requested": "[17.10.0, )", + "resolved": "17.10.0", + "contentHash": "0/2HeACkaHEYU3wc83YlcD2Fi4LMtECJjqrtvw0lPi9DCEa35zSPt1j4fuvM8NagjDqJuh1Ja35WcRtn1Um6/A==", "dependencies": { - "Microsoft.CodeCoverage": "17.9.0", - "Microsoft.TestPlatform.TestHost": "17.9.0" + "Microsoft.CodeCoverage": "17.10.0", + "Microsoft.TestPlatform.TestHost": "17.10.0" } }, "xunit": { "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "US3a3twJziAif1kFPGdk9fALwILHxV0n1roX5j67bN/d3o4DGNLHnV3tr5ZX+uinVrzfkf0avH3zGX8JPBC0qA==", + "requested": "[2.9.0, )", + "resolved": "2.9.0", + "contentHash": "PtU3rZ0ThdmdJqTbK7GkgFf6iBaCR6Q0uvJHznID+XEYk2v6O/b7sRxqnbi3B2gRDXxjTqMkVNayzwsqsFUxRw==", "dependencies": { - "xunit.analyzers": "1.13.0", - "xunit.assert": "2.8.0", - "xunit.core": "[2.8.0]" + "xunit.analyzers": "1.15.0", + "xunit.assert": "2.9.0", + "xunit.core": "[2.9.0]" } }, "xunit.runner.visualstudio": { "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "mqQbS2zr8dfgSWxkNOC6UTzO8JoqpTmM5+FFn2XR/2nVmx2JvEY0YbM5pt2FmXVg9YVe+jKUPHd6KrroyCl67w==" + "requested": "[2.8.2, )", + "resolved": "2.8.2", + "contentHash": "vm1tbfXhFmjFMUmS4M0J0ASXz3/U5XvXBa6DOQUL3fEz4Vt6YPhv+ESCarx6M6D+9kJkJYZKCNvJMas1+nVfmQ==" }, "BenchmarkDotNet": { "type": "Transitive", @@ -703,8 +701,8 @@ }, "Google.Protobuf": { "type": "Transitive", - "resolved": "3.26.1", - "contentHash": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==" + "resolved": "3.27.2", + "contentHash": "0wdgA3LO9mBS477jieBFs4pU1sWhVtwv/P+i9nAEiFDQyUA7PPHDBbJL1CeqYtV18jLiq9og4n7wSVCO171OBg==" }, "GrEmit": { "type": "Transitive", @@ -764,18 +762,17 @@ }, "MessagePack": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==", + "resolved": "2.5.171", + "contentHash": "eX0wTFtE4teu2iDWm/eEGqvVEeO9dqaRXu6MXu1MnhQ/wBkixEjh+1SlKaSh41LL5L7WUJlK04EBpz8FSaGOqw==", "dependencies": { - "MessagePack.Annotations": "2.5.140", - "Microsoft.NET.StringTools": "17.6.3", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "MessagePack.Annotations": "2.5.171", + "Microsoft.NET.StringTools": "17.6.3" } }, "MessagePack.Annotations": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ==" + "resolved": "2.5.171", + "contentHash": "iS5Zb6uiPn3QJVL814+xWlWeH/rW+p2qPoECjOhL7RV71ppld4vDpej5rq4YrxGdLtR66zf+AQwW919sPVMWgw==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -811,8 +808,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "RGD37ZSrratfScYXm7M0HjvxMxZyWZL4jm+XgMZbkIY1UPgjUpbNA/t+WTGj/rC/0Hm9A3IrH3ywbKZkOCnoZA==" + "resolved": "17.10.0", + "contentHash": "yC7oSlnR54XO5kOuHlVOKtxomNNN1BWXX8lK1G2jaPXT9sUok7kCOoA4Pgs0qyFaCtMrNsprztYMeoEGqCm4uA==" }, "Microsoft.CSharp": { "type": "Transitive", @@ -935,18 +932,18 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "1ilw/8vgmjLyKU+2SKXKXaOqpYFJCQfGqGz+x0cosl981VzjrY74Sv6qAJv+neZMZ9ZMxF3ArN6kotaQ4uvEBw==", + "resolved": "17.10.0", + "contentHash": "KkwhjQevuDj0aBRoPLY6OLAhGqbPUEBuKLbaCs0kUVw29qiOYncdORd4mLVJbn9vGZ7/iFGQ/+AoJl0Tu5Umdg==", "dependencies": { "System.Reflection.Metadata": "1.6.0" } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "Spmg7Wx49Ya3SxBjyeAR+nQpjMTKZwTwpZ7KyeOTIqI/WHNPnBU4HUvl5kuHPQAwGWqMy4FGZja1HvEwvoaDiA==", + "resolved": "17.10.0", + "contentHash": "LWpMdfqhHvcUkeMCvNYJO8QlPLlYz9XPPb+ZbaXIKhdmjAV0wqTSrTiW5FLaf7RRZT50AQADDOYMOe0HxDxNgA==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.9.0", + "Microsoft.TestPlatform.ObjectModel": "17.10.0", "Newtonsoft.Json": "13.0.1" } }, @@ -1028,8 +1025,8 @@ }, "ServiceStack.Text": { "type": "Transitive", - "resolved": "8.2.2", - "contentHash": "2WrX0g2eN6L4SnD8lwRhy3Gcopvs/4l9LHMed67fpfcjIr/WwHhBfKANQx1BL2YZN7t4zWikxOJYsUJI5PB1Aw==", + "resolved": "8.3.0", + "contentHash": "n7o3PfhnyNq+zUQARtcI0BWx0eiIWvxMmQMCU9pvgQpkfiFN9/mrPVsolNQuX4uZ7w2AMXIv3FTdKaZUzBeRLQ==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -1051,8 +1048,8 @@ }, "SpanJson": { "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "h28I0lq05Q1CoH+W/pWfmGhxlEeRSUtuD6vO85F3cADQl74tdGDjyJJvfnentybsfYrwbBdU/mZAexsOBmXGAA==" + "resolved": "4.2.0", + "contentHash": "k34gmKdV6r8uS4ZnAj5RRrzC6ElXcL8b3P7OB9yhK8XHvInVGj/oiXyYnfs7A1NHZ2OAV6CIm9Yn6gjr6xVaxA==" }, "System.Buffers": { "type": "Transitive", @@ -1317,37 +1314,37 @@ }, "xunit.analyzers": { "type": "Transitive", - "resolved": "1.13.0", - "contentHash": "Pai9YnDV71/Ox14nBHB6/f62iyPyLbmUG/YYMiA4dfdFZvr0gIYE9yGxSr0i5Tr3INK75wgL2MCUNEKpeiZ2Fw==" + "resolved": "1.15.0", + "contentHash": "s+M8K/Rtlgr6CmD7AYQKrNTvT5sh0l0ZKDoZ3Z/ExhlIwfV9mGAMR4f7KqIB7SSK7ZOhqDTgTUMYPmKfmvWUWQ==" }, "xunit.assert": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "lwf7Dy5/5HbDkaPx1YrGXCByytCEEcIn+KPI74jh2BD/RU/7RhO8c+S3k0Ph+Mr7+cLf338fl+o6UcgPCLa6PA==" + "resolved": "2.9.0", + "contentHash": "Z/1pyia//860wEYTKn6Q5dmgikJdRjgE4t5AoxJkK8oTmidzPLEPG574kmm7LFkMLbH6Frwmgb750kcyR+hwoA==" }, "xunit.core": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "McSTFGTETCxLpmJKE9TWi9FtFthrRbpRrjz2V2g8sK2wRt1+JHs15vwi+B+nfftFkV9aFWIXZfzZM95TIGZNIA==", + "resolved": "2.9.0", + "contentHash": "uRaop9tZsZMCaUS4AfbSPGYHtvywWnm8XXFNUqII7ShWyDBgdchY6gyDNgO4AK1Lv/1NNW61Zq63CsDV6oH6Jg==", "dependencies": { - "xunit.extensibility.core": "[2.8.0]", - "xunit.extensibility.execution": "[2.8.0]" + "xunit.extensibility.core": "[2.9.0]", + "xunit.extensibility.execution": "[2.9.0]" } }, "xunit.extensibility.core": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "eBJv9xQeY0p5z+C/L1tFjUFYqtl5pQqIEYCGTMl+MbRzA7sOlgYKwJE//vEePBp+mgBh7NjD0Qhz0liZBYM27w==", + "resolved": "2.9.0", + "contentHash": "zjDEUSxsr6UNij4gIwCgMqQox+oLDPRZ+mubwWLci+SssPBFQD1xeRR4SvgBuXqbE0QXCJ/STVTp+lxiB5NLVA==", "dependencies": { "xunit.abstractions": "2.0.3" } }, "xunit.extensibility.execution": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "TyyrZesHB9ODZMS9c73OqiBz4x0vL944JCkSPBWW5w6PF2LlUfdfXRjjOhoIOuY6lTmEgl07rS4/Jot9mCYnpg==", + "resolved": "2.9.0", + "contentHash": "5ZTQZvmPLlBw6QzCOwM0KnMsZw6eGjbmC176QHZlcbQoMhGIeGcYzYwn5w9yXxf+4phtplMuVqTpTbFDQh2bqQ==", "dependencies": { - "xunit.extensibility.core": "[2.8.0]" + "xunit.extensibility.core": "[2.9.0]" } }, "serializersbenchmark": { @@ -1356,17 +1353,17 @@ "BenchmarkDotNet": "[0.13.12, )", "BinaryPack": "[1.0.3, )", "Ceras": "[4.1.7, )", - "Google.Protobuf": "[3.26.1, )", + "Google.Protobuf": "[3.27.2, )", "GroBuf": "[1.9.2, )", "Jil": "[2.17.0, )", "MemoryPack": "[1.21.1, )", - "MessagePack": "[2.5.140, )", + "MessagePack": "[2.5.171, )", "MsgPack.Cli": "[1.0.1, )", "Newtonsoft.Json": "[13.0.3, )", "Salar.Bois": "[3.4.0, )", "Salar.Bois.LZ4": "[3.4.0, )", - "ServiceStack.Text": "[8.2.2, )", - "SpanJson": "[4.0.1, )", + "ServiceStack.Text": "[8.3.0, )", + "SpanJson": "[4.2.0, )", "Utf8Json": "[1.3.7, )", "fastJSON": "[2.4.0.4, )", "protobuf-net": "[3.2.30, )" @@ -1385,30 +1382,30 @@ }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[17.9.0, )", - "resolved": "17.9.0", - "contentHash": "7GUNAUbJYn644jzwLm5BD3a2p9C1dmP8Hr6fDPDxgItQk9hBs1Svdxzz07KQ/UphMSmgza9AbijBJGmw5D658A==", + "requested": "[17.10.0, )", + "resolved": "17.10.0", + "contentHash": "0/2HeACkaHEYU3wc83YlcD2Fi4LMtECJjqrtvw0lPi9DCEa35zSPt1j4fuvM8NagjDqJuh1Ja35WcRtn1Um6/A==", "dependencies": { - "Microsoft.CodeCoverage": "17.9.0", - "Microsoft.TestPlatform.TestHost": "17.9.0" + "Microsoft.CodeCoverage": "17.10.0", + "Microsoft.TestPlatform.TestHost": "17.10.0" } }, "xunit": { "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "US3a3twJziAif1kFPGdk9fALwILHxV0n1roX5j67bN/d3o4DGNLHnV3tr5ZX+uinVrzfkf0avH3zGX8JPBC0qA==", + "requested": "[2.9.0, )", + "resolved": "2.9.0", + "contentHash": "PtU3rZ0ThdmdJqTbK7GkgFf6iBaCR6Q0uvJHznID+XEYk2v6O/b7sRxqnbi3B2gRDXxjTqMkVNayzwsqsFUxRw==", "dependencies": { - "xunit.analyzers": "1.13.0", - "xunit.assert": "2.8.0", - "xunit.core": "[2.8.0]" + "xunit.analyzers": "1.15.0", + "xunit.assert": "2.9.0", + "xunit.core": "[2.9.0]" } }, "xunit.runner.visualstudio": { "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "mqQbS2zr8dfgSWxkNOC6UTzO8JoqpTmM5+FFn2XR/2nVmx2JvEY0YbM5pt2FmXVg9YVe+jKUPHd6KrroyCl67w==" + "requested": "[2.8.2, )", + "resolved": "2.8.2", + "contentHash": "vm1tbfXhFmjFMUmS4M0J0ASXz3/U5XvXBa6DOQUL3fEz4Vt6YPhv+ESCarx6M6D+9kJkJYZKCNvJMas1+nVfmQ==" }, "BenchmarkDotNet": { "type": "Transitive", @@ -1466,8 +1463,8 @@ }, "Google.Protobuf": { "type": "Transitive", - "resolved": "3.26.1", - "contentHash": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==" + "resolved": "3.27.2", + "contentHash": "0wdgA3LO9mBS477jieBFs4pU1sWhVtwv/P+i9nAEiFDQyUA7PPHDBbJL1CeqYtV18jLiq9og4n7wSVCO171OBg==" }, "GrEmit": { "type": "Transitive", @@ -1523,18 +1520,17 @@ }, "MessagePack": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==", + "resolved": "2.5.171", + "contentHash": "eX0wTFtE4teu2iDWm/eEGqvVEeO9dqaRXu6MXu1MnhQ/wBkixEjh+1SlKaSh41LL5L7WUJlK04EBpz8FSaGOqw==", "dependencies": { - "MessagePack.Annotations": "2.5.140", - "Microsoft.NET.StringTools": "17.6.3", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "MessagePack.Annotations": "2.5.171", + "Microsoft.NET.StringTools": "17.6.3" } }, "MessagePack.Annotations": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ==" + "resolved": "2.5.171", + "contentHash": "iS5Zb6uiPn3QJVL814+xWlWeH/rW+p2qPoECjOhL7RV71ppld4vDpej5rq4YrxGdLtR66zf+AQwW919sPVMWgw==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -1570,8 +1566,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "RGD37ZSrratfScYXm7M0HjvxMxZyWZL4jm+XgMZbkIY1UPgjUpbNA/t+WTGj/rC/0Hm9A3IrH3ywbKZkOCnoZA==" + "resolved": "17.10.0", + "contentHash": "yC7oSlnR54XO5kOuHlVOKtxomNNN1BWXX8lK1G2jaPXT9sUok7kCOoA4Pgs0qyFaCtMrNsprztYMeoEGqCm4uA==" }, "Microsoft.CSharp": { "type": "Transitive", @@ -1690,18 +1686,18 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "1ilw/8vgmjLyKU+2SKXKXaOqpYFJCQfGqGz+x0cosl981VzjrY74Sv6qAJv+neZMZ9ZMxF3ArN6kotaQ4uvEBw==", + "resolved": "17.10.0", + "contentHash": "KkwhjQevuDj0aBRoPLY6OLAhGqbPUEBuKLbaCs0kUVw29qiOYncdORd4mLVJbn9vGZ7/iFGQ/+AoJl0Tu5Umdg==", "dependencies": { "System.Reflection.Metadata": "1.6.0" } }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "17.9.0", - "contentHash": "Spmg7Wx49Ya3SxBjyeAR+nQpjMTKZwTwpZ7KyeOTIqI/WHNPnBU4HUvl5kuHPQAwGWqMy4FGZja1HvEwvoaDiA==", + "resolved": "17.10.0", + "contentHash": "LWpMdfqhHvcUkeMCvNYJO8QlPLlYz9XPPb+ZbaXIKhdmjAV0wqTSrTiW5FLaf7RRZT50AQADDOYMOe0HxDxNgA==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.9.0", + "Microsoft.TestPlatform.ObjectModel": "17.10.0", "Newtonsoft.Json": "13.0.1" } }, @@ -1783,8 +1779,8 @@ }, "ServiceStack.Text": { "type": "Transitive", - "resolved": "8.2.2", - "contentHash": "2WrX0g2eN6L4SnD8lwRhy3Gcopvs/4l9LHMed67fpfcjIr/WwHhBfKANQx1BL2YZN7t4zWikxOJYsUJI5PB1Aw==", + "resolved": "8.3.0", + "contentHash": "n7o3PfhnyNq+zUQARtcI0BWx0eiIWvxMmQMCU9pvgQpkfiFN9/mrPVsolNQuX4uZ7w2AMXIv3FTdKaZUzBeRLQ==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -1806,8 +1802,8 @@ }, "SpanJson": { "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "h28I0lq05Q1CoH+W/pWfmGhxlEeRSUtuD6vO85F3cADQl74tdGDjyJJvfnentybsfYrwbBdU/mZAexsOBmXGAA==" + "resolved": "4.2.0", + "contentHash": "k34gmKdV6r8uS4ZnAj5RRrzC6ElXcL8b3P7OB9yhK8XHvInVGj/oiXyYnfs7A1NHZ2OAV6CIm9Yn6gjr6xVaxA==" }, "System.Buffers": { "type": "Transitive", @@ -2066,37 +2062,37 @@ }, "xunit.analyzers": { "type": "Transitive", - "resolved": "1.13.0", - "contentHash": "Pai9YnDV71/Ox14nBHB6/f62iyPyLbmUG/YYMiA4dfdFZvr0gIYE9yGxSr0i5Tr3INK75wgL2MCUNEKpeiZ2Fw==" + "resolved": "1.15.0", + "contentHash": "s+M8K/Rtlgr6CmD7AYQKrNTvT5sh0l0ZKDoZ3Z/ExhlIwfV9mGAMR4f7KqIB7SSK7ZOhqDTgTUMYPmKfmvWUWQ==" }, "xunit.assert": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "lwf7Dy5/5HbDkaPx1YrGXCByytCEEcIn+KPI74jh2BD/RU/7RhO8c+S3k0Ph+Mr7+cLf338fl+o6UcgPCLa6PA==" + "resolved": "2.9.0", + "contentHash": "Z/1pyia//860wEYTKn6Q5dmgikJdRjgE4t5AoxJkK8oTmidzPLEPG574kmm7LFkMLbH6Frwmgb750kcyR+hwoA==" }, "xunit.core": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "McSTFGTETCxLpmJKE9TWi9FtFthrRbpRrjz2V2g8sK2wRt1+JHs15vwi+B+nfftFkV9aFWIXZfzZM95TIGZNIA==", + "resolved": "2.9.0", + "contentHash": "uRaop9tZsZMCaUS4AfbSPGYHtvywWnm8XXFNUqII7ShWyDBgdchY6gyDNgO4AK1Lv/1NNW61Zq63CsDV6oH6Jg==", "dependencies": { - "xunit.extensibility.core": "[2.8.0]", - "xunit.extensibility.execution": "[2.8.0]" + "xunit.extensibility.core": "[2.9.0]", + "xunit.extensibility.execution": "[2.9.0]" } }, "xunit.extensibility.core": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "eBJv9xQeY0p5z+C/L1tFjUFYqtl5pQqIEYCGTMl+MbRzA7sOlgYKwJE//vEePBp+mgBh7NjD0Qhz0liZBYM27w==", + "resolved": "2.9.0", + "contentHash": "zjDEUSxsr6UNij4gIwCgMqQox+oLDPRZ+mubwWLci+SssPBFQD1xeRR4SvgBuXqbE0QXCJ/STVTp+lxiB5NLVA==", "dependencies": { "xunit.abstractions": "2.0.3" } }, "xunit.extensibility.execution": { "type": "Transitive", - "resolved": "2.8.0", - "contentHash": "TyyrZesHB9ODZMS9c73OqiBz4x0vL944JCkSPBWW5w6PF2LlUfdfXRjjOhoIOuY6lTmEgl07rS4/Jot9mCYnpg==", + "resolved": "2.9.0", + "contentHash": "5ZTQZvmPLlBw6QzCOwM0KnMsZw6eGjbmC176QHZlcbQoMhGIeGcYzYwn5w9yXxf+4phtplMuVqTpTbFDQh2bqQ==", "dependencies": { - "xunit.extensibility.core": "[2.8.0]" + "xunit.extensibility.core": "[2.9.0]" } }, "serializersbenchmark": { @@ -2105,17 +2101,17 @@ "BenchmarkDotNet": "[0.13.12, )", "BinaryPack": "[1.0.3, )", "Ceras": "[4.1.7, )", - "Google.Protobuf": "[3.26.1, )", + "Google.Protobuf": "[3.27.2, )", "GroBuf": "[1.9.2, )", "Jil": "[2.17.0, )", "MemoryPack": "[1.21.1, )", - "MessagePack": "[2.5.140, )", + "MessagePack": "[2.5.171, )", "MsgPack.Cli": "[1.0.1, )", "Newtonsoft.Json": "[13.0.3, )", "Salar.Bois": "[3.4.0, )", "Salar.Bois.LZ4": "[3.4.0, )", - "ServiceStack.Text": "[8.2.2, )", - "SpanJson": "[4.0.1, )", + "ServiceStack.Text": "[8.3.0, )", + "SpanJson": "[4.2.0, )", "Utf8Json": "[1.3.7, )", "fastJSON": "[2.4.0.4, )", "protobuf-net": "[3.2.30, )" diff --git a/SerializersBenchmark/SerializersBenchmark.csproj b/SerializersBenchmark/SerializersBenchmark.csproj index fbf563b..a40de77 100644 --- a/SerializersBenchmark/SerializersBenchmark.csproj +++ b/SerializersBenchmark/SerializersBenchmark.csproj @@ -17,25 +17,30 @@ - + - + - + - - + + + + + + + diff --git a/SerializersBenchmark/packages.lock.json b/SerializersBenchmark/packages.lock.json index d45f30e..eb1a7b6 100644 --- a/SerializersBenchmark/packages.lock.json +++ b/SerializersBenchmark/packages.lock.json @@ -43,9 +43,9 @@ }, "Google.Protobuf": { "type": "Direct", - "requested": "[3.26.1, )", - "resolved": "3.26.1", - "contentHash": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==", + "requested": "[3.27.2, )", + "resolved": "3.27.2", + "contentHash": "0wdgA3LO9mBS477jieBFs4pU1sWhVtwv/P+i9nAEiFDQyUA7PPHDBbJL1CeqYtV18jLiq9og4n7wSVCO171OBg==", "dependencies": { "System.Memory": "4.5.3" } @@ -77,16 +77,14 @@ }, "MessagePack": { "type": "Direct", - "requested": "[2.5.140, )", - "resolved": "2.5.140", - "contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==", + "requested": "[2.5.171, )", + "resolved": "2.5.171", + "contentHash": "eX0wTFtE4teu2iDWm/eEGqvVEeO9dqaRXu6MXu1MnhQ/wBkixEjh+1SlKaSh41LL5L7WUJlK04EBpz8FSaGOqw==", "dependencies": { - "MessagePack.Annotations": "2.5.140", + "MessagePack.Annotations": "2.5.171", "Microsoft.Bcl.AsyncInterfaces": "6.0.0", "Microsoft.NET.StringTools": "17.6.3", "System.Collections.Immutable": "6.0.0", - "System.Reflection.Emit": "4.7.0", - "System.Reflection.Emit.Lightweight": "4.7.0", "System.Runtime.CompilerServices.Unsafe": "6.0.0", "System.Threading.Tasks.Extensions": "4.5.4" } @@ -142,9 +140,9 @@ }, "ServiceStack.Text": { "type": "Direct", - "requested": "[8.2.2, )", - "resolved": "8.2.2", - "contentHash": "2WrX0g2eN6L4SnD8lwRhy3Gcopvs/4l9LHMed67fpfcjIr/WwHhBfKANQx1BL2YZN7t4zWikxOJYsUJI5PB1Aw==", + "requested": "[8.3.0, )", + "resolved": "8.3.0", + "contentHash": "n7o3PfhnyNq+zUQARtcI0BWx0eiIWvxMmQMCU9pvgQpkfiFN9/mrPVsolNQuX4uZ7w2AMXIv3FTdKaZUzBeRLQ==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -153,9 +151,9 @@ }, "System.Text.Json": { "type": "Direct", - "requested": "[8.0.3, )", - "resolved": "8.0.3", - "contentHash": "hpagS9joOwv6efWfrMmV9MjQXpiXZH72PgN067Ysfr6AWMSD1/1hEcvh/U5mUpPLezEWsOJSuVrmqDIVD958iA==", + "requested": "[8.0.4, )", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "8.0.0", "System.Buffers": "4.5.1", @@ -213,8 +211,8 @@ }, "MessagePack.Annotations": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ==" + "resolved": "2.5.171", + "contentHash": "iS5Zb6uiPn3QJVL814+xWlWeH/rW+p2qPoECjOhL7RV71ppld4vDpej5rq4YrxGdLtR66zf+AQwW919sPVMWgw==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -621,9 +619,9 @@ }, "Google.Protobuf": { "type": "Direct", - "requested": "[3.26.1, )", - "resolved": "3.26.1", - "contentHash": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==" + "requested": "[3.27.2, )", + "resolved": "3.27.2", + "contentHash": "0wdgA3LO9mBS477jieBFs4pU1sWhVtwv/P+i9nAEiFDQyUA7PPHDBbJL1CeqYtV18jLiq9og4n7wSVCO171OBg==" }, "GroBuf": { "type": "Direct", @@ -657,13 +655,12 @@ }, "MessagePack": { "type": "Direct", - "requested": "[2.5.140, )", - "resolved": "2.5.140", - "contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==", + "requested": "[2.5.171, )", + "resolved": "2.5.171", + "contentHash": "eX0wTFtE4teu2iDWm/eEGqvVEeO9dqaRXu6MXu1MnhQ/wBkixEjh+1SlKaSh41LL5L7WUJlK04EBpz8FSaGOqw==", "dependencies": { - "MessagePack.Annotations": "2.5.140", - "Microsoft.NET.StringTools": "17.6.3", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "MessagePack.Annotations": "2.5.171", + "Microsoft.NET.StringTools": "17.6.3" } }, "MsgPack.Cli": { @@ -723,9 +720,9 @@ }, "ServiceStack.Text": { "type": "Direct", - "requested": "[8.2.2, )", - "resolved": "8.2.2", - "contentHash": "2WrX0g2eN6L4SnD8lwRhy3Gcopvs/4l9LHMed67fpfcjIr/WwHhBfKANQx1BL2YZN7t4zWikxOJYsUJI5PB1Aw==", + "requested": "[8.3.0, )", + "resolved": "8.3.0", + "contentHash": "n7o3PfhnyNq+zUQARtcI0BWx0eiIWvxMmQMCU9pvgQpkfiFN9/mrPVsolNQuX4uZ7w2AMXIv3FTdKaZUzBeRLQ==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -734,9 +731,9 @@ }, "SpanJson": { "type": "Direct", - "requested": "[4.0.1, )", - "resolved": "4.0.1", - "contentHash": "h28I0lq05Q1CoH+W/pWfmGhxlEeRSUtuD6vO85F3cADQl74tdGDjyJJvfnentybsfYrwbBdU/mZAexsOBmXGAA==" + "requested": "[4.2.0, )", + "resolved": "4.2.0", + "contentHash": "k34gmKdV6r8uS4ZnAj5RRrzC6ElXcL8b3P7OB9yhK8XHvInVGj/oiXyYnfs7A1NHZ2OAV6CIm9Yn6gjr6xVaxA==" }, "Utf8Json": { "type": "Direct", @@ -796,8 +793,8 @@ }, "MessagePack.Annotations": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ==" + "resolved": "2.5.171", + "contentHash": "iS5Zb6uiPn3QJVL814+xWlWeH/rW+p2qPoECjOhL7RV71ppld4vDpej5rq4YrxGdLtR66zf+AQwW919sPVMWgw==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -1496,9 +1493,9 @@ }, "Google.Protobuf": { "type": "Direct", - "requested": "[3.26.1, )", - "resolved": "3.26.1", - "contentHash": "CHZX8zXqhF/fdUtd+AYzew8T2HFkAoe5c7lbGxZY/qryAlQXckDvM5BfOJjXlMS7kyICqQTMszj4w1bX5uBJ/w==" + "requested": "[3.27.2, )", + "resolved": "3.27.2", + "contentHash": "0wdgA3LO9mBS477jieBFs4pU1sWhVtwv/P+i9nAEiFDQyUA7PPHDBbJL1CeqYtV18jLiq9og4n7wSVCO171OBg==" }, "GroBuf": { "type": "Direct", @@ -1532,13 +1529,12 @@ }, "MessagePack": { "type": "Direct", - "requested": "[2.5.140, )", - "resolved": "2.5.140", - "contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==", + "requested": "[2.5.171, )", + "resolved": "2.5.171", + "contentHash": "eX0wTFtE4teu2iDWm/eEGqvVEeO9dqaRXu6MXu1MnhQ/wBkixEjh+1SlKaSh41LL5L7WUJlK04EBpz8FSaGOqw==", "dependencies": { - "MessagePack.Annotations": "2.5.140", - "Microsoft.NET.StringTools": "17.6.3", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" + "MessagePack.Annotations": "2.5.171", + "Microsoft.NET.StringTools": "17.6.3" } }, "MsgPack.Cli": { @@ -1598,9 +1594,9 @@ }, "ServiceStack.Text": { "type": "Direct", - "requested": "[8.2.2, )", - "resolved": "8.2.2", - "contentHash": "2WrX0g2eN6L4SnD8lwRhy3Gcopvs/4l9LHMed67fpfcjIr/WwHhBfKANQx1BL2YZN7t4zWikxOJYsUJI5PB1Aw==", + "requested": "[8.3.0, )", + "resolved": "8.3.0", + "contentHash": "n7o3PfhnyNq+zUQARtcI0BWx0eiIWvxMmQMCU9pvgQpkfiFN9/mrPVsolNQuX4uZ7w2AMXIv3FTdKaZUzBeRLQ==", "dependencies": { "Microsoft.CSharp": "4.7.0", "System.Diagnostics.DiagnosticSource": "8.0.0", @@ -1609,9 +1605,9 @@ }, "SpanJson": { "type": "Direct", - "requested": "[4.0.1, )", - "resolved": "4.0.1", - "contentHash": "h28I0lq05Q1CoH+W/pWfmGhxlEeRSUtuD6vO85F3cADQl74tdGDjyJJvfnentybsfYrwbBdU/mZAexsOBmXGAA==" + "requested": "[4.2.0, )", + "resolved": "4.2.0", + "contentHash": "k34gmKdV6r8uS4ZnAj5RRrzC6ElXcL8b3P7OB9yhK8XHvInVGj/oiXyYnfs7A1NHZ2OAV6CIm9Yn6gjr6xVaxA==" }, "Utf8Json": { "type": "Direct", @@ -1667,8 +1663,8 @@ }, "MessagePack.Annotations": { "type": "Transitive", - "resolved": "2.5.140", - "contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ==" + "resolved": "2.5.171", + "contentHash": "iS5Zb6uiPn3QJVL814+xWlWeH/rW+p2qPoECjOhL7RV71ppld4vDpej5rq4YrxGdLtR66zf+AQwW919sPVMWgw==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive",