Skip to content

Commit b3950ef

Browse files
authored
Add benchmark (#28)
1 parent 7f271fe commit b3950ef

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

src/Benchmarks/JsonNetBenchmarks.cs

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,57 @@
1313
// limitations under the License.
1414

1515
using BenchmarkDotNet.Attributes;
16+
using Destructurama;
17+
using Destructurama.JsonNet;
18+
using Newtonsoft.Json;
19+
using Serilog;
20+
using Serilog.Core;
1621

1722
namespace Benchmarks;
1823

1924
public class JsonNetBenchmarks
2025
{
26+
private class HasName
27+
{
28+
public string? Name { get; set; }
29+
}
30+
31+
private ILogEventPropertyValueFactory _factory = null!;
32+
private object _value = null!;
33+
private readonly JsonNetDestructuringPolicy _policy = new();
34+
2135
[GlobalSetup]
2236
public void Setup()
2337
{
38+
var test = new
39+
{
40+
HN = new HasName { Name = "Some name" },
41+
Arr = new[] { 1, 2, 3 },
42+
S = "Some string",
43+
D = new Dictionary<int, string> { { 1, "One" }, { 2, "Two" } },
44+
E = (object?)null,
45+
ESPN = JsonConvert.DeserializeObject("{\"\":\"Empty string property name\"}"),
46+
WSPN = JsonConvert.DeserializeObject("{\"\r\n\":\"Whitespace property name\"}")
47+
};
48+
49+
string ser = JsonConvert.SerializeObject(test, new JsonSerializerSettings
50+
{
51+
TypeNameHandling = TypeNameHandling.Auto
52+
});
53+
_value = JsonConvert.DeserializeObject<dynamic>(ser)!;
54+
55+
var log = new LoggerConfiguration()
56+
.Destructure.JsonNetTypes()
57+
.CreateLogger();
58+
59+
var processor = log.GetType().GetField("_messageTemplateProcessor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!.GetValue(log)!;
60+
var converter = processor.GetType().GetField("_propertyValueConverter", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)!.GetValue(processor)!;
61+
_factory = (ILogEventPropertyValueFactory)converter;
2462
}
2563

26-
//[Benchmark]
27-
public void Execute()
64+
[Benchmark]
65+
public void Destructure()
2866
{
29-
//TODO: implement
67+
_policy.TryDestructure(_value, _factory, out _);
3068
}
3169
}

src/Benchmarks/Program.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
using BenchmarkDotNet.Configs;
1616
using BenchmarkDotNet.Diagnosers;
1717
using BenchmarkDotNet.Running;
18-
using Benchmarks;
1918

20-
new JsonNetBenchmarks().Setup();
2119
var config = ManualConfig
2220
.Create(DefaultConfig.Instance)
2321
.AddDiagnoser(MemoryDiagnoser.Default);

src/Destructurama.JsonNet/Destructurama.JsonNet.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1212
<PackageReference Include="Serilog" Version="2.12.0" />
1313
<PackageReference Include="PolySharp" Version="1.14.1" PrivateAssets="All" />
14+
<InternalsVisibleTo Include="Benchmarks, PublicKey=00240000048000009400000006020000002400005253413100040000010001000fe215af9b769897395aac526ca6744222fcf543787b16f58980844d6c49f65bbf0a62502d69646c58f14a8a29ba60d43c85a2a5ef1ed103c9a0e18d6491e4b0bafd2c25e290028d19203d4366ae5651aafd48abaf485588fd6a25fbe23c2c9a644a24337a041966b09cbb73dc3a080bf79564d15a26e97c1bff4f345ee256a9" />
1415
</ItemGroup>
1516

1617
</Project>

0 commit comments

Comments
 (0)