From 9933b756d165746b7feae95d23acf9d89cc45c37 Mon Sep 17 00:00:00 2001 From: Hardik K Date: Fri, 13 Nov 2026 21:15:48 +0530 Subject: [PATCH 1/3] fix(v3): retain full JSON pointer path on OpenAPI 3.0 schema references (#3155) * fix(v3): retain full JSON pointer path on OpenAPI 3.0 schema references * test(v3): add unit test for component property schema reference in OpenAPI 3.0 * test(v3): add regression test for nested component subschema references in OpenAPI 3.0 --- .../Reader/V3/OpenApiSchemaDeserializer.cs | 4 +- .../V3Tests/OpenApiSubschemaReferenceTests.cs | 64 +++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSubschemaReferenceTests.cs diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs index 7bb9327b6..22c7bf792 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs @@ -397,7 +397,9 @@ public static IOpenApiSchema LoadSchema(JsonNode node, OpenApiDocument hostDocum if (pointer != null) { var reference = GetReferenceIdAndExternalResource(pointer); - return new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); + var result = new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); + result.Reference.SetJsonPointerPath(pointer, context.GetLocation()); + return result; } var schema = new OpenApiSchema(); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSubschemaReferenceTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSubschemaReferenceTests.cs new file mode 100644 index 000000000..f5cb4f142 --- /dev/null +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSubschemaReferenceTests.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.OpenApi; +using Microsoft.OpenApi.Reader; +using Microsoft.OpenApi.Tests; +using Xunit; + +namespace Microsoft.OpenApi.Readers.Tests.V3Tests +{ + [Collection("DefaultSettings")] + public class OpenApiSubschemaReferenceTests + { + private const string Document = @" +openapi: 3.0.3 +info: + title: Subschema references + version: 1.0.0 +paths: {} +components: + schemas: + User: + type: object + properties: + name: + type: string + address: + type: object + properties: + city: + type: string + name: + type: integer + UserName: + $ref: '#/components/schemas/User/properties/name' + UserCity: + $ref: '#/components/schemas/User/properties/address/properties/city' +"; + + [Fact] + public void ReferenceToComponentPropertyResolvesToThatProperty() + { + var document = OpenApiDocument.Parse(Document, "yaml", SettingsFixture.ReaderSettings).Document; + + var userName = Assert.IsType(document.Components.Schemas["UserName"]); + + Assert.NotNull(userName.Target); + Assert.Equal(JsonSchemaType.String, userName.Target.Type); + Assert.Equal("#/components/schemas/User/properties/name", userName.Reference.ReferenceV3); + } + + [Fact] + public void ReferenceToNestedComponentPropertyResolvesToThatProperty() + { + var document = OpenApiDocument.Parse(Document, "yaml", SettingsFixture.ReaderSettings).Document; + + var userCity = Assert.IsType(document.Components.Schemas["UserCity"]); + + Assert.NotNull(userCity.Target); + Assert.Equal(JsonSchemaType.String, userCity.Target.Type); + Assert.Equal("#/components/schemas/User/properties/address/properties/city", userCity.Reference.ReferenceV3); + } + } +} From cd63c4e1ae17e283d4c8c10d3e54318b23111e5e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 13 Nov 2026 13:05:11 -0500 Subject: [PATCH 2/3] fix(reader): balance example locations and defer reference paths Restore parsing locations after named examples, including exception paths, and construct locations only when relative reference resolution requires them. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: dc47aa82-c449-43a1-8a70-c4f3c464ae51 --- .../Models/BaseOpenApiReference.cs | 4 +- .../Reader/V3/OpenApiSchemaDeserializer.cs | 2 +- .../Reader/V3/OpenApiV3Deserializer.cs | 22 +++- .../Reader/V31/OpenApiSchemaDeserializer.cs | 6 +- .../Reader/V31/OpenApiV31Deserializer.cs | 22 +++- .../ParsingContextTests.cs | 110 ++++++++++++++++++ .../V31Tests/OpenApiDynamicRefTests.cs | 2 +- 7 files changed, 150 insertions(+), 18 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/BaseOpenApiReference.cs b/src/Microsoft.OpenApi/Models/BaseOpenApiReference.cs index 9a2e57d87..d32e318d2 100644 --- a/src/Microsoft.OpenApi/Models/BaseOpenApiReference.cs +++ b/src/Microsoft.OpenApi/Models/BaseOpenApiReference.cs @@ -302,7 +302,7 @@ protected virtual void SetAdditional31MetadataFromMapNode(JsonObject jsonObject) // noop for the base type } - internal void SetJsonPointerPath(string pointer, string nodeLocation) + internal void SetJsonPointerPath(string pointer, ParsingContext context) { // Relative reference to internal JSON schema node/resource (e.g. "#/properties/b") #if NETSTANDARD2_1 || NETCOREAPP2_1_OR_GREATER || NET5_0_OR_GREATER @@ -311,7 +311,7 @@ internal void SetJsonPointerPath(string pointer, string nodeLocation) if (pointer.StartsWith("#/", StringComparison.OrdinalIgnoreCase) && !pointer.ToLowerInvariant().Contains("/components/schemas")) #endif { - ReferenceV3 = ResolveRelativePointer(nodeLocation, pointer); + ReferenceV3 = ResolveRelativePointer(context.GetLocation(), pointer); } // Absolute reference or anchor (e.g. "#/components/schemas/..." or full URL) diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs index 22c7bf792..40b082752 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs @@ -398,7 +398,7 @@ public static IOpenApiSchema LoadSchema(JsonNode node, OpenApiDocument hostDocum { var reference = GetReferenceIdAndExternalResource(pointer); var result = new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); - result.Reference.SetJsonPointerPath(pointer, context.GetLocation()); + result.Reference.SetJsonPointerPath(pointer, context); return result; } diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs index 1e281afb0..17e78e0ca 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs @@ -75,15 +75,27 @@ private static void ProcessAnyMapFields( foreach (var propertyMapElement in mapElements) { context.StartObject(propertyMapElement.Key); - - if (propertyMapElement.Value != null) + try { - var any = anyMapFieldMap[anyMapFieldName].PropertyGetter(propertyMapElement.Value); - if (any is not null) + if (propertyMapElement.Value != null) { - anyMapFieldMap[anyMapFieldName].PropertySetter(propertyMapElement.Value, any); + var any = anyMapFieldMap[anyMapFieldName].PropertyGetter(propertyMapElement.Value); + if (any is not null) + { + anyMapFieldMap[anyMapFieldName].PropertySetter(propertyMapElement.Value, any); + } } } + catch (OpenApiException exception) + { + exception.Pointer = context.GetLocation(); + context.Diagnostic.Errors.Add(new(exception)); + break; + } + finally + { + context.EndObject(); + } } } } diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs index 52ca0912b..a1a3aae93 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs @@ -434,7 +434,6 @@ public static IOpenApiSchema LoadSchema(JsonNode node, OpenApiDocument hostDocum if (pointer != null) { - var nodeLocation = context.GetLocation(); var reference = GetReferenceIdAndExternalResource(pointer); var result = new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); var referenceMetadata = new OpenApiSchema(); @@ -448,14 +447,13 @@ public static IOpenApiSchema LoadSchema(JsonNode node, OpenApiDocument hostDocum } }); result.Reference.ApplySchemaMetadata(referenceMetadata, jsonObject); - result.Reference.SetJsonPointerPath(pointer, nodeLocation); + result.Reference.SetJsonPointerPath(pointer, context); return result; } if (dynamicPointer != null) { - var nodeLocation = context.GetLocation(); var anchorName = JsonNodeHelper.ExtractDynamicAnchorName(dynamicPointer); string? externalResource = JsonNodeHelper.IsFragmentOnlyDynamicRef(dynamicPointer) ? null @@ -472,7 +470,7 @@ public static IOpenApiSchema LoadSchema(JsonNode node, OpenApiDocument hostDocum } }); result.Reference.ApplySchemaMetadata(referenceMetadata, jsonObject); - result.Reference.SetJsonPointerPath(dynamicPointer, nodeLocation); + result.Reference.SetJsonPointerPath(dynamicPointer, context); return result; } diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs index 617ee9ced..24c49b8ff 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs @@ -74,15 +74,27 @@ private static void ProcessAnyMapFields( foreach (var propertyMapElement in propertyMapGetter) { context.StartObject(propertyMapElement.Key); - - if (propertyMapElement.Value != null) + try { - var any = anyMapFieldMap[anyMapFieldName].PropertyGetter(propertyMapElement.Value); - if (any is not null) + if (propertyMapElement.Value != null) { - anyMapFieldMap[anyMapFieldName].PropertySetter(propertyMapElement.Value, any); + var any = anyMapFieldMap[anyMapFieldName].PropertyGetter(propertyMapElement.Value); + if (any is not null) + { + anyMapFieldMap[anyMapFieldName].PropertySetter(propertyMapElement.Value, any); + } } } + catch (OpenApiException exception) + { + exception.Pointer = context.GetLocation(); + context.Diagnostic.Errors.Add(new OpenApiError(exception)); + break; + } + finally + { + context.EndObject(); + } } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/ParsingContextTests.cs b/test/Microsoft.OpenApi.Readers.Tests/ParsingContextTests.cs index f8a2111a8..86a899d11 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/ParsingContextTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/ParsingContextTests.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; +using System.Text.Json.Nodes; using Microsoft.OpenApi.Reader; using Xunit; @@ -114,5 +116,113 @@ public void GetLocation_MultipleSegmentsWithSpecialChars_EscapesEachSegment() Assert.Equal("#/content/application~1json/schema", location); } + + [Theory] + [InlineData(OpenApiSpecVersion.OpenApi3_0, false)] + [InlineData(OpenApiSpecVersion.OpenApi3_0, true)] + [InlineData(OpenApiSpecVersion.OpenApi3_1, false)] + [InlineData(OpenApiSpecVersion.OpenApi3_1, true)] + public void ParseFragment_WithNamedExamples_RestoresLocation(OpenApiSpecVersion version, bool isParameter) + { + var context = CreateContext(); + context.StartObject("parent"); + var node = JsonNode.Parse(""" + { + "examples": { + "empty": {}, + "populated": { "value": "hello" } + } + } + """); + Assert.NotNull(node); + var document = new OpenApiDocument(); + + if (isParameter) + { + Assert.NotNull(context.ParseFragment(node, version, document)); + } + else + { + Assert.NotNull(context.ParseFragment(node, version, document)); + } + + Assert.Equal("#/parent", context.GetLocation()); + } + + [Theory] + [InlineData(OpenApiSpecVersion.OpenApi3_0, false)] + [InlineData(OpenApiSpecVersion.OpenApi3_0, true)] + [InlineData(OpenApiSpecVersion.OpenApi3_1, false)] + [InlineData(OpenApiSpecVersion.OpenApi3_1, true)] + public void ParseFragment_WhenNamedExampleThrows_RestoresLocation(OpenApiSpecVersion version, bool isParameter) + { + var context = CreateContext(); + context.StartObject("parent"); + var document = new OpenApiDocument(); + document.AddComponent("cycle", new OpenApiExampleReference("cycle", document)); + var node = JsonNode.Parse(""" + { + "examples": { + "cycle": { "$ref": "#/components/examples/cycle" } + } + } + """); + Assert.NotNull(node); + + if (isParameter) + { + Assert.Throws(() => context.ParseFragment(node, version, document)); + } + else + { + Assert.Throws(() => context.ParseFragment(node, version, document)); + } + + Assert.Equal("#/parent", context.GetLocation()); + } + + [Theory] + [InlineData(OpenApiSpecVersion.OpenApi3_0, false)] + [InlineData(OpenApiSpecVersion.OpenApi3_0, true)] + [InlineData(OpenApiSpecVersion.OpenApi3_1, false)] + [InlineData(OpenApiSpecVersion.OpenApi3_1, true)] + public void ParseFragment_WhenNamedExampleReportsError_PreservesExampleLocation(OpenApiSpecVersion version, bool isParameter) + { + var context = CreateContext(); + context.StartObject("parent"); + var document = new OpenApiDocument(); + document.AddComponent("unreadable", new UnreadableExampleReference()); + var node = JsonNode.Parse(""" + { + "examples": { + "unreadable": { "$ref": "#/components/examples/unreadable" } + } + } + """); + Assert.NotNull(node); + + if (isParameter) + { + Assert.NotNull(context.ParseFragment(node, version, document)); + } + else + { + Assert.NotNull(context.ParseFragment(node, version, document)); + } + + var error = Assert.Single(context.Diagnostic.Errors); + Assert.Equal("Cannot read example.", error.Message); + Assert.Equal("#/parent/examples/unreadable", error.Pointer); + Assert.Equal("#/parent", context.GetLocation()); + } + + private sealed class UnreadableExampleReference : OpenApiExampleReference + { + public UnreadableExampleReference() : base("unreadable") + { + } + + public override IOpenApiExample Target => throw new OpenApiException("Cannot read example."); + } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDynamicRefTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDynamicRefTests.cs index a862c971b..808a24ad7 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDynamicRefTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDynamicRefTests.cs @@ -1439,7 +1439,7 @@ public void DynamicRefResolvesInObjectModelBuiltDocument() doc.Workspace.RegisterComponents(doc); var nextRef = Assert.IsType(tree.Properties["next"]); - nextRef.Reference.SetJsonPointerPath("#node", "#/components/schemas/Tree/properties/next"); + nextRef.Reference.SetJsonPointerPath("#node", new ParsingContext(new())); Assert.True(nextRef.Reference.IsDynamicRefOnly); Assert.NotNull(nextRef.Target); Assert.Same(tree, nextRef.Target); From c661eacd0b8987290f84c888da323b6e4eef67de Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 13 Nov 2026 13:15:15 -0500 Subject: [PATCH 3/3] chore(benchmark): refresh performance reports Regenerate description and empty-model benchmark reports after repairing example locations and deferring reference path construction. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: dc47aa82-c449-43a1-8a70-c4f3c464ae51 --- .../performance.Descriptions-report-github.md | 24 +++---- .../performance.Descriptions-report.csv | 12 ++-- .../performance.Descriptions-report.html | 24 +++---- .../performance.Descriptions-report.json | 2 +- .../performance.EmptyModels-report-github.md | 68 +++++++++---------- .../performance.EmptyModels-report.csv | 56 +++++++-------- .../performance.EmptyModels-report.html | 66 +++++++++--------- .../performance.EmptyModels-report.json | 2 +- 8 files changed, 127 insertions(+), 127 deletions(-) diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md index 1d6f5c560..eaedd8917 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md @@ -1,20 +1,20 @@ ``` -BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.9168/25H2/2025Update/HudsonValley2) +BenchmarkDotNet v0.15.8, Windows 11 (10.0.26300.9711) Snapdragon X 12-core X1E80100 3.40 GHz (Max: 3.42GHz), 1 CPU, 12 logical and 12 physical cores -.NET SDK 10.0.303 - [Host] : .NET 8.0.30 (8.0.30, 8.0.3026.36720), Arm64 RyuJIT armv8.0-a - ShortRun : .NET 8.0.30 (8.0.30, 8.0.3026.36720), Arm64 RyuJIT armv8.0-a +.NET SDK 10.0.404 + [Host] : .NET 8.0.34 (8.0.34, 8.0.3426.52217), Arm64 RyuJIT armv8.0-a + ShortRun : .NET 8.0.34 (8.0.34, 8.0.3426.52217), Arm64 RyuJIT armv8.0-a Job=ShortRun IterationCount=3 LaunchCount=1 WarmupCount=3 ``` -| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | -|------------- |-------------:|-------------:|-------------:|-----------:|-----------:|----------:|-------------:| -| PetStoreYaml | 335.7 μs | 239.3 μs | 13.12 μs | 78.1250 | 7.8125 | - | 327.37 KB | -| PetStoreJson | 131.8 μs | 106.7 μs | 5.85 μs | 50.7813 | 11.7188 | - | 209.53 KB | -| GHESYaml | 497,859.7 μs | 200,217.0 μs | 10,974.57 μs | 47000.0000 | 14000.0000 | 3000.0000 | 267512.44 KB | -| GHESJson | 278,562.0 μs | 234,097.6 μs | 12,831.68 μs | 23000.0000 | 11000.0000 | 2000.0000 | 140859.51 KB | -| GHESNextYaml | 710,430.7 μs | 664,647.3 μs | 36,431.56 μs | 84000.0000 | 15000.0000 | 3000.0000 | 469450.01 KB | -| GHESNextJson | 491,725.9 μs | 233,616.5 μs | 12,805.31 μs | 59000.0000 | 13000.0000 | 3000.0000 | 345193.66 KB | +| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | +|------------- |-------------:|--------------:|-------------:|-----------:|-----------:|----------:|-------------:| +| PetStoreYaml | 415.7 μs | 152.24 μs | 8.34 μs | 78.1250 | - | - | 328.74 KB | +| PetStoreJson | 174.4 μs | 97.36 μs | 5.34 μs | 50.7813 | - | - | 210.9 KB | +| GHESYaml | 707,562.0 μs | 277,871.52 μs | 15,231.08 μs | 47000.0000 | 14000.0000 | 3000.0000 | 267861.29 KB | +| GHESJson | 364,989.6 μs | 44,023.13 μs | 2,413.06 μs | 23000.0000 | 11000.0000 | 2000.0000 | 141208.05 KB | +| GHESNextYaml | 705,198.1 μs | 217,842.24 μs | 11,940.67 μs | 50000.0000 | 15000.0000 | 3000.0000 | 282677.81 KB | +| GHESNextJson | 401,263.3 μs | 207,253.17 μs | 11,360.25 μs | 26000.0000 | 12000.0000 | 2000.0000 | 158421.13 KB | diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv index 9c5d277d5..68d4393a9 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv @@ -1,7 +1,7 @@ Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Gen0,Gen1,Gen2,Allocated -PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,335.7 μs,239.3 μs,13.12 μs,78.1250,7.8125,0.0000,327.37 KB -PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,131.8 μs,106.7 μs,5.85 μs,50.7813,11.7188,0.0000,209.53 KB -GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"497,859.7 μs","200,217.0 μs","10,974.57 μs",47000.0000,14000.0000,3000.0000,267512.44 KB -GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"278,562.0 μs","234,097.6 μs","12,831.68 μs",23000.0000,11000.0000,2000.0000,140859.51 KB -GHESNextYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"710,430.7 μs","664,647.3 μs","36,431.56 μs",84000.0000,15000.0000,3000.0000,469450.01 KB -GHESNextJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"491,725.9 μs","233,616.5 μs","12,805.31 μs",59000.0000,13000.0000,3000.0000,345193.66 KB +PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,415.7 μs,152.24 μs,8.34 μs,78.1250,0.0000,0.0000,328.74 KB +PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,174.4 μs,97.36 μs,5.34 μs,50.7813,0.0000,0.0000,210.9 KB +GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"707,562.0 μs","277,871.52 μs","15,231.08 μs",47000.0000,14000.0000,3000.0000,267861.29 KB +GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"364,989.6 μs","44,023.13 μs","2,413.06 μs",23000.0000,11000.0000,2000.0000,141208.05 KB +GHESNextYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"705,198.1 μs","217,842.24 μs","11,940.67 μs",50000.0000,15000.0000,3000.0000,282677.81 KB +GHESNextJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"401,263.3 μs","207,253.17 μs","11,360.25 μs",26000.0000,12000.0000,2000.0000,158421.13 KB diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html index e3a7a9c62..72672193f 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html @@ -2,7 +2,7 @@ -performance.Descriptions-20260819-103535 +performance.Descriptions-20261113-130601