diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ce216a16b..a3206040b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -96,3 +96,4 @@ stages: command: push packagesToPush: $(Pipeline.Workspace)/nuget/*.nupkg publishVstsFeed: MessagePack-CSharp/MessagePack-CI + continueOnError: true diff --git a/benchmark/SerializerBenchmark/SerializerBenchmark.cs b/benchmark/SerializerBenchmark/SerializerBenchmark.cs index f88aa5a04..4832d5810 100644 --- a/benchmark/SerializerBenchmark/SerializerBenchmark.cs +++ b/benchmark/SerializerBenchmark/SerializerBenchmark.cs @@ -31,19 +31,19 @@ public class AllSerializerBenchmark_BytesInOut new MsgPack_v2_opt(), //new MsgPack_v2_string(), //new MsgPack_v2_str_lz4(), - new ProtobufNet(), - new JsonNet(), - new BsonNet(), - new BinaryFormatter_(), - new DataContract_(), - new Hyperion_(), - new Jil_(), - new SpanJson_(), - new Utf8Json_(), - new SystemTextJson(), - new MsgPackCli(), - new FsPickler_(), - new Ceras_(), + new ProtobufNetSerializer(), + new JsonNetSerializer(), + new BsonNetSerializer(), + new BinaryFormatterSerializer(), + new DataContractSerializer(), + new HyperionSerializer(), + new JilSerializer(), + new SpanJsonSerializer(), + new Utf8JsonSerializer(), + new SystemTextJsonSerializer(), + new MsgPackCliSerializer(), + new FsPicklerSerializer(), + new CerasSerializer(), }; protected static readonly ExpressionTreeFixture ExpressionTreeFixture = new ExpressionTreeFixture(); @@ -1111,19 +1111,19 @@ public class ShortRun_AllSerializerBenchmark_BytesInOut new MsgPack_v2_string(), new MsgPack_v1_str_lz4(), new MsgPack_v2_str_lz4(), - new ProtobufNet(), - new JsonNet(), - new BsonNet(), - new BinaryFormatter_(), - new DataContract_(), - new Hyperion_(), - new Jil_(), - new SpanJson_(), - new Utf8Json_(), - new SystemTextJson(), - new MsgPackCli(), - new FsPickler_(), - new Ceras_(), + new ProtobufNetSerializer(), + new JsonNetSerializer(), + new BsonNetSerializer(), + new BinaryFormatterSerializer(), + new DataContractSerializer(), + new HyperionSerializer(), + new JilSerializer(), + new SpanJsonSerializer(), + new Utf8JsonSerializer(), + new SystemTextJsonSerializer(), + new MsgPackCliSerializer(), + new FsPicklerSerializer(), + new CerasSerializer(), }; protected static readonly ExpressionTreeFixture ExpressionTreeFixture = new ExpressionTreeFixture(); diff --git a/benchmark/SerializerBenchmark/Serializers/BinaryFormatter.cs b/benchmark/SerializerBenchmark/Serializers/BinaryFormatter.cs deleted file mode 100644 index b3981a890..000000000 --- a/benchmark/SerializerBenchmark/Serializers/BinaryFormatter.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) All contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System.IO; -using System.Runtime.Serialization.Formatters.Binary; -using Benchmark.Serializers; - -#pragma warning disable SA1649 // File name should match first type name - -public class BinaryFormatter_ : SerializerBase -{ - public override T Deserialize(object input) - { - using (var ms = new MemoryStream((byte[])input)) - { - return (T)new BinaryFormatter().Deserialize(ms); - } - } - - public override object Serialize(T input) - { - using (var ms = new MemoryStream()) - { - new BinaryFormatter().Serialize(ms, input); - ms.Flush(); - return ms.ToArray(); - } - } -} diff --git a/benchmark/SerializerBenchmark/Serializers/BinaryFormatterSerializer.cs b/benchmark/SerializerBenchmark/Serializers/BinaryFormatterSerializer.cs new file mode 100644 index 000000000..c54b5487f --- /dev/null +++ b/benchmark/SerializerBenchmark/Serializers/BinaryFormatterSerializer.cs @@ -0,0 +1,34 @@ +// Copyright (c) All contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +namespace Benchmark.Serializers +{ + public class BinaryFormatterSerializer : SerializerBase + { + public override T Deserialize(object input) + { + using (var ms = new MemoryStream((byte[])input)) + { + return (T)new BinaryFormatter().Deserialize(ms); + } + } + + public override object Serialize(T input) + { + using (var ms = new MemoryStream()) + { + new BinaryFormatter().Serialize(ms, input); + ms.Flush(); + return ms.ToArray(); + } + } + + public override string ToString() + { + return "BinaryFormatter"; + } + } +} diff --git a/benchmark/SerializerBenchmark/Serializers/BsonNetSerializer.cs b/benchmark/SerializerBenchmark/Serializers/BsonNetSerializer.cs index cd379a0fe..68616af44 100644 --- a/benchmark/SerializerBenchmark/Serializers/BsonNetSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/BsonNetSerializer.cs @@ -2,42 +2,47 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.IO; -using Benchmark.Serializers; using Newtonsoft.Json; using Newtonsoft.Json.Bson; -#pragma warning disable SA1649 // File name should match first type name - -public class BsonNet : SerializerBase +namespace Benchmark.Serializers { - private static readonly JsonSerializer Serializer = new JsonSerializer(); - - public override T Deserialize(object input) + public class BsonNetSerializer : SerializerBase { - using (var ms = new MemoryStream((byte[])input)) - using (var jr = new BsonDataReader(ms)) - { - return Serializer.Deserialize(jr); - } - } + private static readonly JsonSerializer Serializer = new JsonSerializer(); - public override object Serialize(T input) - { - object value = input; - if (typeof(T).IsValueType) + public override T Deserialize(object input) { - value = new[] { input }; + using (var ms = new MemoryStream((byte[])input)) + using (var jr = new BsonDataReader(ms)) + { + return Serializer.Deserialize(jr); + } } - using (var ms = new MemoryStream()) + public override object Serialize(T input) { - using (var jw = new BsonDataWriter(ms)) + object value = input; + if (typeof(T).IsValueType) { - Serializer.Serialize(jw, value); + value = new[] { input }; } - ms.Flush(); - return ms.ToArray(); + using (var ms = new MemoryStream()) + { + using (var jw = new BsonDataWriter(ms)) + { + Serializer.Serialize(jw, value); + } + + ms.Flush(); + return ms.ToArray(); + } + } + + public override string ToString() + { + return "BsonNet"; } } } diff --git a/benchmark/SerializerBenchmark/Serializers/CerasSerializer.cs b/benchmark/SerializerBenchmark/Serializers/CerasSerializer.cs index cfdd9be09..9521e4f2b 100644 --- a/benchmark/SerializerBenchmark/Serializers/CerasSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/CerasSerializer.cs @@ -1,21 +1,25 @@ // Copyright (c) All contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Benchmark.Serializers; - -#pragma warning disable SA1649 // File name should match first type name - -public class Ceras_ : SerializerBase +namespace Benchmark.Serializers { - private Ceras.CerasSerializer ceras = new Ceras.CerasSerializer(); - - public override T Deserialize(object input) + public class CerasSerializer : SerializerBase { - return this.ceras.Deserialize((byte[])input); - } + private Ceras.CerasSerializer ceras = new Ceras.CerasSerializer(); - public override object Serialize(T input) - { - return this.ceras.Serialize(input); + public override T Deserialize(object input) + { + return this.ceras.Deserialize((byte[])input); + } + + public override object Serialize(T input) + { + return this.ceras.Serialize(input); + } + + public override string ToString() + { + return "Ceras"; + } } } diff --git a/benchmark/SerializerBenchmark/Serializers/DataContractSerializer.cs b/benchmark/SerializerBenchmark/Serializers/DataContractSerializer.cs index eae1431ff..4425ed0e2 100644 --- a/benchmark/SerializerBenchmark/Serializers/DataContractSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/DataContractSerializer.cs @@ -2,28 +2,32 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.IO; -using System.Runtime.Serialization; -using Benchmark.Serializers; -#pragma warning disable SA1649 // File name should match first type name - -public class DataContract_ : SerializerBase +namespace Benchmark.Serializers { - public override T Deserialize(object input) + public class DataContractSerializer : SerializerBase { - using (var ms = new MemoryStream((byte[])input)) + public override T Deserialize(object input) { - return (T)new DataContractSerializer(typeof(T)).ReadObject(ms); + using (var ms = new MemoryStream((byte[])input)) + { + return (T)new System.Runtime.Serialization.DataContractSerializer(typeof(T)).ReadObject(ms); + } } - } - public override object Serialize(T input) - { - using (var ms = new MemoryStream()) + public override object Serialize(T input) + { + using (var ms = new MemoryStream()) + { + new System.Runtime.Serialization.DataContractSerializer(typeof(T)).WriteObject(ms, input); + ms.Flush(); + return ms.ToArray(); + } + } + + public override string ToString() { - new DataContractSerializer(typeof(T)).WriteObject(ms, input); - ms.Flush(); - return ms.ToArray(); + return "DataContract"; } } } diff --git a/benchmark/SerializerBenchmark/Serializers/FsPicklerSerializer.cs b/benchmark/SerializerBenchmark/Serializers/FsPicklerSerializer.cs index 18b1c88e8..d0c8341fe 100644 --- a/benchmark/SerializerBenchmark/Serializers/FsPicklerSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/FsPicklerSerializer.cs @@ -2,30 +2,35 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.IO; -using Benchmark.Serializers; using MBrace.FsPickler; -#pragma warning disable SA1649 // File name should match first type name - -public class FsPickler_ : SerializerBase +namespace Benchmark.Serializers { - private static readonly BinarySerializer Serializer = MBrace.FsPickler.FsPickler.CreateBinarySerializer(); - - public override T Deserialize(object input) + public class FsPicklerSerializer : SerializerBase { - using (var ms = new MemoryStream((byte[])input)) + private static readonly BinarySerializer Serializer = MBrace.FsPickler.FsPickler.CreateBinarySerializer(); + + public override T Deserialize(object input) { - return Serializer.Deserialize(ms); + using (var ms = new MemoryStream((byte[])input)) + { + return Serializer.Deserialize(ms); + } } - } - public override object Serialize(T input) - { - using (var ms = new MemoryStream()) + public override object Serialize(T input) + { + using (var ms = new MemoryStream()) + { + Serializer.Serialize(ms, input); + ms.Flush(); + return ms.ToArray(); + } + } + + public override string ToString() { - Serializer.Serialize(ms, input); - ms.Flush(); - return ms.ToArray(); + return "FsPickler"; } } } diff --git a/benchmark/SerializerBenchmark/Serializers/HyperionSerializer.cs b/benchmark/SerializerBenchmark/Serializers/HyperionSerializer.cs index b38ef9494..0f5d5d847 100644 --- a/benchmark/SerializerBenchmark/Serializers/HyperionSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/HyperionSerializer.cs @@ -2,30 +2,35 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.IO; -using Benchmark.Serializers; using Hyperion; -#pragma warning disable SA1649 // File name should match first type name - -public class Hyperion_ : SerializerBase +namespace Benchmark.Serializers { - private static readonly Serializer Serializer = new Hyperion.Serializer(); - - public override T Deserialize(object input) + public class HyperionSerializer : SerializerBase { - using (var ms = new MemoryStream((byte[])input)) + private static readonly Serializer Serializer = new Hyperion.Serializer(); + + public override T Deserialize(object input) { - return Serializer.Deserialize(ms); + using (var ms = new MemoryStream((byte[])input)) + { + return Serializer.Deserialize(ms); + } } - } - public override object Serialize(T input) - { - using (var ms = new MemoryStream()) + public override object Serialize(T input) + { + using (var ms = new MemoryStream()) + { + Serializer.Serialize(input, ms); + ms.Flush(); + return ms.ToArray(); + } + } + + public override string ToString() { - Serializer.Serialize(input, ms); - ms.Flush(); - return ms.ToArray(); + return "Hyperion"; } } } diff --git a/benchmark/SerializerBenchmark/Serializers/JilSerializer.cs b/benchmark/SerializerBenchmark/Serializers/JilSerializer.cs index b68a0585f..983e07d3e 100644 --- a/benchmark/SerializerBenchmark/Serializers/JilSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/JilSerializer.cs @@ -2,20 +2,25 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Text; -using Benchmark.Serializers; using Jil; -#pragma warning disable SA1649 // File name should match first type name - -public class Jil_ : SerializerBase +namespace Benchmark.Serializers { - public override object Serialize(T input) + public class JilSerializer : SerializerBase { - return Encoding.UTF8.GetBytes(Jil.JSON.Serialize(input, Options.ISO8601)); - } + public override object Serialize(T input) + { + return Encoding.UTF8.GetBytes(Jil.JSON.Serialize(input, Options.ISO8601)); + } - public override T Deserialize(object input) - { - return Jil.JSON.Deserialize(Encoding.UTF8.GetString((byte[])input), Options.ISO8601); + public override T Deserialize(object input) + { + return Jil.JSON.Deserialize(Encoding.UTF8.GetString((byte[])input), Options.ISO8601); + } + + public override string ToString() + { + return "Jil"; + } } } diff --git a/benchmark/SerializerBenchmark/Serializers/JsonNetSerializer.cs b/benchmark/SerializerBenchmark/Serializers/JsonNetSerializer.cs index 80761c6a4..b85574ddc 100644 --- a/benchmark/SerializerBenchmark/Serializers/JsonNetSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/JsonNetSerializer.cs @@ -3,37 +3,42 @@ using System.IO; using System.Text; -using Benchmark.Serializers; using Newtonsoft.Json; -#pragma warning disable SA1649 // File name should match first type name - -public class JsonNet : SerializerBase +namespace Benchmark.Serializers { - private static readonly JsonSerializer Serializer = new JsonSerializer(); - - public override T Deserialize(object input) + public class JsonNetSerializer : SerializerBase { - using (var ms = new MemoryStream((byte[])input)) - using (var sr = new StreamReader(ms, Encoding.UTF8)) - using (var jr = new JsonTextReader(sr)) + private static readonly JsonSerializer Serializer = new JsonSerializer(); + + public override T Deserialize(object input) { - return Serializer.Deserialize(jr); + using (var ms = new MemoryStream((byte[])input)) + using (var sr = new StreamReader(ms, Encoding.UTF8)) + using (var jr = new JsonTextReader(sr)) + { + return Serializer.Deserialize(jr); + } } - } - public override object Serialize(T input) - { - using (var ms = new MemoryStream()) + public override object Serialize(T input) { - using (var sw = new StreamWriter(ms, Encoding.UTF8)) - using (var jw = new JsonTextWriter(sw)) + using (var ms = new MemoryStream()) { - Serializer.Serialize(jw, input); + using (var sw = new StreamWriter(ms, Encoding.UTF8)) + using (var jw = new JsonTextWriter(sw)) + { + Serializer.Serialize(jw, input); + } + + ms.Flush(); + return ms.ToArray(); } + } - ms.Flush(); - return ms.ToArray(); + public override string ToString() + { + return "JsonNet"; } } } diff --git a/benchmark/SerializerBenchmark/Serializers/MessagePackSerializer.cs b/benchmark/SerializerBenchmark/Serializers/MessagePackSerializer.cs index eb5901c9f..7583e0361 100644 --- a/benchmark/SerializerBenchmark/Serializers/MessagePackSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/MessagePackSerializer.cs @@ -4,172 +4,221 @@ extern alias oldmsgpack; extern alias newmsgpack; -using Benchmark.Serializers; - #pragma warning disable SA1649 // File name should match first type name -public class MessagePack_v1 : SerializerBase +namespace Benchmark.Serializers { - public override T Deserialize(object input) + public class MessagePack_v1 : SerializerBase { - return oldmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input); - } + public override T Deserialize(object input) + { + return oldmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input); + } - public override object Serialize(T input) - { - return oldmsgpack::MessagePack.MessagePackSerializer.Serialize(input); - } -} + public override object Serialize(T input) + { + return oldmsgpack::MessagePack.MessagePackSerializer.Serialize(input); + } -public class MessagePack_v2 : SerializerBase -{ - public override T Deserialize(object input) - { - return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input); + public override string ToString() + { + return "MessagePack_v1"; + } } - public override object Serialize(T input) + public class MessagePack_v2 : SerializerBase { - return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input); - } -} + public override T Deserialize(object input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input); + } -public class MsgPack_v1_string : SerializerBase -{ - public override T Deserialize(object input) - { - return oldmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); + public override object Serialize(T input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input); + } + + public override string ToString() + { + return "MessagePack_v2"; + } } - public override object Serialize(T input) + public class MsgPack_v1_string : SerializerBase { - return oldmsgpack::MessagePack.MessagePackSerializer.Serialize(input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); - } -} + public override T Deserialize(object input) + { + return oldmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); + } -public class MsgPack_v2_string : SerializerBase -{ - private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions Options = newmsgpack::MessagePack.MessagePackSerializerOptions.Standard.WithResolver(newmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); + public override object Serialize(T input) + { + return oldmsgpack::MessagePack.MessagePackSerializer.Serialize(input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); + } - public override T Deserialize(object input) - { - return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, options: Options); + public override string ToString() + { + return "MsgPack_v1_string"; + } } - public override object Serialize(T input) + public class MsgPack_v2_string : SerializerBase { - return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, options: Options); - } -} + private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions Options = + newmsgpack::MessagePack.MessagePackSerializerOptions.Standard.WithResolver(newmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); -public class MessagePackLz4_v1 : SerializerBase -{ - public override T Deserialize(object input) - { - return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Deserialize((byte[])input); + public override T Deserialize(object input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, options: Options); + } + + public override object Serialize(T input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, options: Options); + } + + public override string ToString() + { + return "MsgPack_v2_string"; + } } - public override object Serialize(T input) + public class MessagePackLz4_v1 : SerializerBase { - return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Serialize(input); - } -} + public override T Deserialize(object input) + { + return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Deserialize((byte[])input); + } -public class MessagePackLz4_v2 : SerializerBase -{ - private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions LZ4BlockArray = newmsgpack::MessagePack.MessagePackSerializerOptions.Standard.WithCompression(newmsgpack::MessagePack.MessagePackCompression.Lz4BlockArray); + public override object Serialize(T input) + { + return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Serialize(input); + } - public override T Deserialize(object input) - { - return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, LZ4BlockArray); + public override string ToString() + { + return "MessagePackLz4_v1"; + } } - public override object Serialize(T input) + public class MessagePackLz4_v2 : SerializerBase { - return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, LZ4BlockArray); - } -} + private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions LZ4BlockArray = + newmsgpack::MessagePack.MessagePackSerializerOptions.Standard.WithCompression(newmsgpack::MessagePack.MessagePackCompression.Lz4BlockArray); -public class MsgPack_v1_str_lz4 : SerializerBase -{ - public override T Deserialize(object input) - { - return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Deserialize((byte[])input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); + public override T Deserialize(object input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, LZ4BlockArray); + } + + public override object Serialize(T input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, LZ4BlockArray); + } + + public override string ToString() + { + return "MessagePackLz4_v2"; + } } - public override object Serialize(T input) + public class MsgPack_v1_str_lz4 : SerializerBase { - return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Serialize(input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); - } -} + public override T Deserialize(object input) + { + return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Deserialize((byte[])input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); + } -public class MsgPack_v2_str_lz4 : SerializerBase -{ - private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions Options = newmsgpack::MessagePack.MessagePackSerializerOptions.Standard.WithResolver(newmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance).WithCompression(newmsgpack::MessagePack.MessagePackCompression.Lz4BlockArray); + public override object Serialize(T input) + { + return oldmsgpack::MessagePack.LZ4MessagePackSerializer.Serialize(input, oldmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance); + } - public override T Deserialize(object input) - { - return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, Options); + public override string ToString() + { + return "MsgPack_v1_str_lz4"; + } } - public override object Serialize(T input) + public class MsgPack_v2_str_lz4 : SerializerBase { - return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, Options); - } -} + private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions Options = newmsgpack::MessagePack.MessagePackSerializerOptions.Standard + .WithResolver(newmsgpack::MessagePack.Resolvers.ContractlessStandardResolver.Instance) + .WithCompression(newmsgpack::MessagePack.MessagePackCompression.Lz4BlockArray); -public class MsgPack_v2_opt : SerializerBase -{ - private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions Options = newmsgpack::MessagePack.MessagePackSerializerOptions.Standard.WithResolver(OptimizedResolver.Instance); + public override T Deserialize(object input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, Options); + } - public override T Deserialize(object input) - { - return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, Options); + public override object Serialize(T input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, Options); + } + + public override string ToString() + { + return "MsgPack_v2_str_lz4"; + } } - public override object Serialize(T input) + public class MsgPack_v2_opt : SerializerBase { - return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, Options); - } -} + private static readonly newmsgpack::MessagePack.MessagePackSerializerOptions Options = + newmsgpack::MessagePack.MessagePackSerializerOptions.Standard.WithResolver(OptimizedResolver.Instance); -public class OptimizedResolver : newmsgpack::MessagePack.IFormatterResolver -{ - public static readonly newmsgpack::MessagePack.IFormatterResolver Instance = new OptimizedResolver(); + public override T Deserialize(object input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Deserialize((byte[])input, Options); + } - // configure your custom resolvers. - private static readonly newmsgpack::MessagePack.IFormatterResolver[] Resolvers = new newmsgpack::MessagePack.IFormatterResolver[] - { - newmsgpack::MessagePack.Resolvers.NativeGuidResolver.Instance, - newmsgpack::MessagePack.Resolvers.NativeDecimalResolver.Instance, - newmsgpack::MessagePack.Resolvers.NativeDateTimeResolver.Instance, - newmsgpack::MessagePack.Resolvers.StandardResolver.Instance, - }; + public override object Serialize(T input) + { + return newmsgpack::MessagePack.MessagePackSerializer.Serialize(input, Options); + } - private OptimizedResolver() - { + public override string ToString() + { + return "MsgPack_v2_opt"; + } } - public newmsgpack::MessagePack.Formatters.IMessagePackFormatter GetFormatter() + public class OptimizedResolver : newmsgpack::MessagePack.IFormatterResolver { - return Cache.Formatter; - } + public static readonly newmsgpack::MessagePack.IFormatterResolver Instance = new OptimizedResolver(); - private static class Cache - { -#pragma warning disable SA1401 // Fields should be private - public static newmsgpack::MessagePack.Formatters.IMessagePackFormatter Formatter; -#pragma warning restore SA1401 // Fields should be private + // configure your custom resolvers. + private static readonly newmsgpack::MessagePack.IFormatterResolver[] Resolvers = new newmsgpack::MessagePack.IFormatterResolver[] + { + newmsgpack::MessagePack.Resolvers.NativeGuidResolver.Instance, newmsgpack::MessagePack.Resolvers.NativeDecimalResolver.Instance, + newmsgpack::MessagePack.Resolvers.NativeDateTimeResolver.Instance, newmsgpack::MessagePack.Resolvers.StandardResolver.Instance, + }; - static Cache() + private OptimizedResolver() { - foreach (var resolver in Resolvers) + } + + public newmsgpack::MessagePack.Formatters.IMessagePackFormatter GetFormatter() + { + return Cache.Formatter; + } + + private static class Cache + { + #pragma warning disable SA1401 // Fields should be private + public static newmsgpack::MessagePack.Formatters.IMessagePackFormatter Formatter; + #pragma warning restore SA1401 // Fields should be private + + static Cache() { - var f = resolver.GetFormatter(); - if (f != null) + foreach (var resolver in Resolvers) { - Formatter = f; - return; + var f = resolver.GetFormatter(); + if (f != null) + { + Formatter = f; + return; + } } } } diff --git a/benchmark/SerializerBenchmark/Serializers/MsgPackCliSerializer.cs b/benchmark/SerializerBenchmark/Serializers/MsgPackCliSerializer.cs index a03127ae6..f3238d556 100644 --- a/benchmark/SerializerBenchmark/Serializers/MsgPackCliSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/MsgPackCliSerializer.cs @@ -1,19 +1,23 @@ // Copyright (c) All contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Benchmark.Serializers; - -#pragma warning disable SA1649 // File name should match first type name - -public class MsgPackCli : SerializerBase +namespace Benchmark.Serializers { - public override T Deserialize(object input) + public class MsgPackCliSerializer : SerializerBase { - return MsgPack.Serialization.MessagePackSerializer.Get().UnpackSingleObject((byte[])input); - } + public override T Deserialize(object input) + { + return MsgPack.Serialization.MessagePackSerializer.Get().UnpackSingleObject((byte[])input); + } - public override object Serialize(T input) - { - return MsgPack.Serialization.MessagePackSerializer.Get().PackSingleObject(input); + public override object Serialize(T input) + { + return MsgPack.Serialization.MessagePackSerializer.Get().PackSingleObject(input); + } + + public override string ToString() + { + return "MsgPackCli"; + } } } diff --git a/benchmark/SerializerBenchmark/Serializers/ProtobufNetSerializer.cs b/benchmark/SerializerBenchmark/Serializers/ProtobufNetSerializer.cs new file mode 100644 index 000000000..7b44b5a75 --- /dev/null +++ b/benchmark/SerializerBenchmark/Serializers/ProtobufNetSerializer.cs @@ -0,0 +1,33 @@ +// Copyright (c) All contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.IO; +using ProtoBuf; + +namespace Benchmark.Serializers +{ + public class ProtobufNetSerializer : SerializerBase + { + public override T Deserialize(object input) + { + using (var ms = new MemoryStream((byte[])input)) + { + return Serializer.Deserialize(ms); + } + } + + public override object Serialize(T input) + { + using (var ms = new MemoryStream()) + { + Serializer.Serialize(ms, input); + return ms.ToArray(); + } + } + + public override string ToString() + { + return "ProtobufNet"; + } + } +} diff --git a/benchmark/SerializerBenchmark/Serializers/ProtobufSerializer.cs b/benchmark/SerializerBenchmark/Serializers/ProtobufSerializer.cs deleted file mode 100644 index d0394065d..000000000 --- a/benchmark/SerializerBenchmark/Serializers/ProtobufSerializer.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) All contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System.IO; -using Benchmark.Serializers; -using ProtoBuf; - -public class -#pragma warning disable SA1649 // File name should match first type name - -ProtobufNet : SerializerBase -{ - public override T Deserialize(object input) - { - using (var ms = new MemoryStream((byte[])input)) - { - return Serializer.Deserialize(ms); - } - } - - public override object Serialize(T input) - { - using (var ms = new MemoryStream()) - { - Serializer.Serialize(ms, input); - return ms.ToArray(); - } - } -} diff --git a/benchmark/SerializerBenchmark/Serializers/SpanJsonSerializer.cs b/benchmark/SerializerBenchmark/Serializers/SpanJsonSerializer.cs index a3a2f44d7..33ccbd998 100644 --- a/benchmark/SerializerBenchmark/Serializers/SpanJsonSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/SpanJsonSerializer.cs @@ -1,19 +1,23 @@ // Copyright (c) All contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Benchmark.Serializers; - -#pragma warning disable SA1649 // File name should match first type name - -public class SpanJson_ : SerializerBase +namespace Benchmark.Serializers { - public override object Serialize(T input) + public class SpanJsonSerializer : SerializerBase { - return SpanJson.JsonSerializer.Generic.Utf8.Serialize(input); - } + public override object Serialize(T input) + { + return SpanJson.JsonSerializer.Generic.Utf8.Serialize(input); + } - public override T Deserialize(object input) - { - return SpanJson.JsonSerializer.Generic.Utf8.Deserialize((byte[])input); + public override T Deserialize(object input) + { + return SpanJson.JsonSerializer.Generic.Utf8.Deserialize((byte[])input); + } + + public override string ToString() + { + return "SpanJson"; + } } } diff --git a/benchmark/SerializerBenchmark/Serializers/SystemTextJsonSerializer.cs b/benchmark/SerializerBenchmark/Serializers/SystemTextJsonSerializer.cs index f6358d154..baf143f99 100644 --- a/benchmark/SerializerBenchmark/Serializers/SystemTextJsonSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/SystemTextJsonSerializer.cs @@ -1,20 +1,24 @@ // Copyright (c) All contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Benchmark.Serializers; - -#pragma warning disable SA1649 // File name should match first type name - -public class SystemTextJson : SerializerBase +namespace Benchmark.Serializers { - public override object Serialize(T input) + public class SystemTextJsonSerializer : SerializerBase { - return System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(input); - } + public override object Serialize(T input) + { + return System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(input); + } - public override T Deserialize(object input) - { - var span = (byte[])input; - return System.Text.Json.JsonSerializer.Deserialize(span); + public override T Deserialize(object input) + { + var span = (byte[])input; + return System.Text.Json.JsonSerializer.Deserialize(span); + } + + public override string ToString() + { + return "SystemTextJson"; + } } } diff --git a/benchmark/SerializerBenchmark/Serializers/Utf8JsonSerializer.cs b/benchmark/SerializerBenchmark/Serializers/Utf8JsonSerializer.cs index f52b0d9b7..fec69a81a 100644 --- a/benchmark/SerializerBenchmark/Serializers/Utf8JsonSerializer.cs +++ b/benchmark/SerializerBenchmark/Serializers/Utf8JsonSerializer.cs @@ -1,19 +1,23 @@ // Copyright (c) All contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. -using Benchmark.Serializers; - -#pragma warning disable SA1649 // File name should match first type name - -public class Utf8Json_ : SerializerBase +namespace Benchmark.Serializers { - public override object Serialize(T input) + public class Utf8JsonSerializer : SerializerBase { - return Utf8Json.JsonSerializer.Serialize(input); - } + public override object Serialize(T input) + { + return Utf8Json.JsonSerializer.Serialize(input); + } - public override T Deserialize(object input) - { - return Utf8Json.JsonSerializer.Deserialize((byte[])input); + public override T Deserialize(object input) + { + return Utf8Json.JsonSerializer.Deserialize((byte[])input); + } + + public override string ToString() + { + return "UTF8Json"; + } } }