From e516a8c8e0f615e72b17e8e32f451e9dd9c97091 Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Mon, 22 Jan 2024 09:02:50 +0300 Subject: [PATCH 1/2] Add benchmark --- src/Benchmarks/JsonNetBenchmarks.cs | 44 +++++++++++++++++-- src/Benchmarks/Program.cs | 2 - .../Destructurama.JsonNet.csproj | 1 + 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/Benchmarks/JsonNetBenchmarks.cs b/src/Benchmarks/JsonNetBenchmarks.cs index 2a411a3..089ed31 100644 --- a/src/Benchmarks/JsonNetBenchmarks.cs +++ b/src/Benchmarks/JsonNetBenchmarks.cs @@ -13,19 +13,57 @@ // limitations under the License. using BenchmarkDotNet.Attributes; +using Newtonsoft.Json; +using Serilog.Core; +using Serilog; +using Destructurama; +using Destructurama.JsonNet; namespace Benchmarks; public class JsonNetBenchmarks { + private class HasName + { + public string? Name { get; set; } + } + + private ILogEventPropertyValueFactory _factory = null!; + private object _value = null!; + private readonly JsonNetDestructuringPolicy _policy = new(); + [GlobalSetup] public void Setup() { + var test = new + { + HN = new HasName { Name = "Some name" }, + Arr = new[] { 1, 2, 3 }, + S = "Some string", + D = new Dictionary { { 1, "One" }, { 2, "Two" } }, + E = (object?)null, + ESPN = JsonConvert.DeserializeObject("{\"\":\"Empty string property name\"}"), + WSPN = JsonConvert.DeserializeObject("{\"\r\n\":\"Whitespace property name\"}") + }; + + string ser = JsonConvert.SerializeObject(test, new JsonSerializerSettings + { + TypeNameHandling = TypeNameHandling.Auto + }); + _value = JsonConvert.DeserializeObject(ser)!; + + var log = new LoggerConfiguration() + .Destructure.JsonNetTypes() + .CreateLogger(); + + var processor = log.GetType().GetField("_messageTemplateProcessor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!.GetValue(log)!; + var converter = processor.GetType().GetField("_propertyValueConverter", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!.GetValue(processor)!; + _factory = (ILogEventPropertyValueFactory)converter; } - //[Benchmark] - public void Execute() + [Benchmark] + public void Destructure() { - //TODO: implement + _policy.TryDestructure(_value, _factory, out _); } } diff --git a/src/Benchmarks/Program.cs b/src/Benchmarks/Program.cs index 005cf3c..bf3b7aa 100644 --- a/src/Benchmarks/Program.cs +++ b/src/Benchmarks/Program.cs @@ -15,9 +15,7 @@ using BenchmarkDotNet.Configs; using BenchmarkDotNet.Diagnosers; using BenchmarkDotNet.Running; -using Benchmarks; -new JsonNetBenchmarks().Setup(); var config = ManualConfig .Create(DefaultConfig.Instance) .AddDiagnoser(MemoryDiagnoser.Default); diff --git a/src/Destructurama.JsonNet/Destructurama.JsonNet.csproj b/src/Destructurama.JsonNet/Destructurama.JsonNet.csproj index 989cdbc..7390dbb 100644 --- a/src/Destructurama.JsonNet/Destructurama.JsonNet.csproj +++ b/src/Destructurama.JsonNet/Destructurama.JsonNet.csproj @@ -11,6 +11,7 @@ + From 37407e4612a0c41b29c0bbf72bea5f9413cc0bff Mon Sep 17 00:00:00 2001 From: Ivan Maximov Date: Mon, 22 Jan 2024 09:04:43 +0300 Subject: [PATCH 2/2] format --- src/Benchmarks/JsonNetBenchmarks.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Benchmarks/JsonNetBenchmarks.cs b/src/Benchmarks/JsonNetBenchmarks.cs index 089ed31..2a360be 100644 --- a/src/Benchmarks/JsonNetBenchmarks.cs +++ b/src/Benchmarks/JsonNetBenchmarks.cs @@ -13,11 +13,11 @@ // limitations under the License. using BenchmarkDotNet.Attributes; -using Newtonsoft.Json; -using Serilog.Core; -using Serilog; using Destructurama; using Destructurama.JsonNet; +using Newtonsoft.Json; +using Serilog; +using Serilog.Core; namespace Benchmarks;