You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently we instantiate new objects every time for the following properties, this can have a large memory impact for large OpenAPI descriptions. For eg: For the Graph OpenAPI this will create 142k schemas, for a total of 1.1 million objects that might be unused. So we have an opportunity for some memory perf. improvements by lazily instantiating these.
public virtual IDictionary<string, OpenApiSchema> PatternProperties { get; set; } = new Dictionary<string, OpenApiSchema>();
public virtual IList<JsonNode> Enum { get; set; } = new List<JsonNode>();
public virtual IList<OpenApiSchema> AllOf { get; set; } = new List<OpenApiSchema>();
public virtual IList<OpenApiSchema> OneOf { get; set; } = new List<OpenApiSchema>();
public virtual IList<OpenApiSchema> AnyOf { get; set; } = new List<OpenApiSchema>();
public virtual ISet<string> Required { get; set; } = new HashSet<string>();
public virtual IDictionary<string, OpenApiSchema> Properties { get; set; } = new Dictionary<string, OpenApiSchema>();
public virtual IDictionary<string, IOpenApiExtension> Extensions { get; set; } = new Dictionary<string, IOpenApiExtension>();
A couple of different ideas were identified:
Lazy Instantiation: Explore using the init pattern and lazy get instantiation to reduce unnecessary object allocations in the OpenAPISchema
Structs vs. Classes: Evaluate the possibility of redefining OpenAPISchema and other types as structs instead of classes to improve performance.
IDictionary properties should have a default value and no setter.
Document that is more complex. (eg: point in time snapshot (via submodule) graph beta openapi spec)
Use these as tests to see if the changes actually improve performance.
Activity
RachitMalik12 commentedon Feb 26, 2025
Sample of documents needed:
Use these as tests to see if the changes actually improve performance.
RachitMalik12 commentedon Feb 26, 2025
We need to make a decision on whether we should use v1 as a baseline and then port the same testing to v2.
baywet commentedon Mar 28, 2025
(assigned to myself to build the benchmarking and comparison infrastructure for this, Maggie should continue working on the performance improvements)
RachitMalik12 commentedon Apr 1, 2025
Something that was removed from the docs, putting it here for reference, related to your comment Vincent Biret (@baywet)
Potential Performance improvements