From 7165eda9a768f4fc650594772cc6db519028e654 Mon Sep 17 00:00:00 2001 From: Eirik Tsarpalis Date: Tue, 17 Sep 2024 14:04:34 +0100 Subject: [PATCH 1/2] Add JsonNode construction benchmarks --- .../System.Text.Json/Node/Perf_Create.cs | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs diff --git a/src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs b/src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs new file mode 100644 index 00000000000..8bca392732e --- /dev/null +++ b/src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs @@ -0,0 +1,79 @@ +using BenchmarkDotNet.Attributes; +using MicroBenchmarks; +using System.Text.Json.Nodes; + +namespace System.Text.Json.Node.Tests +{ + [BenchmarkCategory(Categories.Libraries, Categories.JSON)] + public class Perf_Create + { + [Benchmark] + public JsonNode Create_JsonBool() + { + return true; + } + + [Benchmark] + public JsonNode Create_JsonNumber() + { + return 42; + } + + [Benchmark] + public JsonNode Create_JsonString() + { + return "Some string"; + } + + [Benchmark] + public JsonNode Create_JsonArray() + { + return new JsonArray { null, null, null, null }; + } + + [Benchmark] + public JsonNode Create_JsonObject_Small() + { + return new JsonObject + { + ["prop0"] = null, + ["prop1"] = null, + ["prop2"] = null, + ["prop3"] = null, + ["prop4"] = null, + ["prop5"] = null, + ["prop6"] = null, + ["prop7"] = null, + ["prop8"] = null, + }; + } + + [Benchmark] + public JsonNode Create_JsonObject_Large() + { + return new JsonObject + { + ["prop0"] = null, + ["prop1"] = null, + ["prop2"] = null, + ["prop3"] = null, + ["prop4"] = null, + ["prop5"] = null, + ["prop6"] = null, + ["prop7"] = null, + ["prop8"] = null, + ["prop9"] = null, + ["prop10"] = null, + ["prop11"] = null, + ["prop12"] = null, + ["prop13"] = null, + ["prop14"] = null, + ["prop15"] = null, + ["prop16"] = null, + ["prop17"] = null, + ["prop18"] = null, + ["prop19"] = null, + }; + } + } +} \ No newline at end of file From 26e65c2eb6c01d2b76af1f884ec07cfc0e3f62b8 Mon Sep 17 00:00:00 2001 From: Eirik Tsarpalis Date: Tue, 17 Sep 2024 20:34:21 +0100 Subject: [PATCH 2/2] Address feedback --- .../System.Text.Json/Node/Perf_Create.cs | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs b/src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs index 8bca392732e..16df68360e1 100644 --- a/src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs +++ b/src/benchmarks/micro/libraries/System.Text.Json/Node/Perf_Create.cs @@ -7,28 +7,54 @@ namespace System.Text.Json.Node.Tests [BenchmarkCategory(Categories.Libraries, Categories.JSON)] public class Perf_Create { + private readonly JsonNode[] _results = new JsonNode[50]; + [Benchmark] - public JsonNode Create_JsonBool() + public Span Create_JsonBool() { - return true; + Span results = _results.AsSpan(); + for (int i = 0; i < results.Length; i++) + { + results[i] = (JsonNode)true; + } + + return results; } [Benchmark] - public JsonNode Create_JsonNumber() + public Span Create_JsonNumber() { - return 42; + Span results = _results.AsSpan(); + for (int i = 0; i < results.Length; i++) + { + results[i] = (JsonNode)42; + } + + return results; } [Benchmark] - public JsonNode Create_JsonString() + public Span Create_JsonString() { - return "Some string"; + Span results = _results.AsSpan(); + for (int i = 0; i < results.Length; i++) + { + results[i] = (JsonNode)"some string"; + } + + return results; } [Benchmark] - public JsonNode Create_JsonArray() + public Span Create_JsonArray() { - return new JsonArray { null, null, null, null }; + Span results = _results.AsSpan(0, 20); + for (int i = 0; i < results.Length; i++) + { + results[i] = new JsonArray { null, null, null, null }; + } + + return results; } [Benchmark]