microsoft / microsoft/OpenAPI.NET.OData
EntityModel.ConvertToOpenApi method memory usage
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C#
- Sterne
- 240
- Forks
- 70
- Ø Merge
- 7 Std. 59 Min.
- Gemergte PRs (30 T.)
- 13
Beschreibung
When using IEdmModel.ConvertToOpenApi - some EDMX documents appear to trigger massive memory usage on some occasions it never seems to finish, I've left it for upwards of 30 minutes. I am trying to generate documentation for Microsoft Dynamics Business Central API's.
Assemblies affected
This is a C# WPF .NET7.0 app
- Microsoft.OpenApi V1.6.4
- Microsoft.OpenApi.OData V1.4.0
- Microsoft.OpenApi.Readers V1.6.4
Microsoft.OpenApi.OData.EdmModelOpenApiExtensions.ConvertToOpenApi()
Steps to reproduce
the below code in conjunction with the example EDMX examples replicates the issue
var EdmData = System.IO.File.ReadAllText(ExampleEdmxFilePath);
IEdmModel model = CsdlReader.Parse(XElement.Parse(EdmData).CreateReader());
var document = EntityModel.ConvertToOpenApi();
Expected result
The OpenApiDocument is created quickly and with reasonable memory usage
Actual result
The OpenApiDocument is not created/created very slowly and uses massive amount of memory
Additional detail
From the attached zip file
- EDMX 1 - this is a collection of ~15 custom API's - the OpenApiDocument takes around 5 minutes to be created, if I export this to a json OpenApiv3 document the resulting file is 3.5Gb and it generates ~22,000 paths, it's uses ~9Gb of memory according to Visual Studio resource profiler. If I import the OpenApiV3 Json document into Swagger it is not recognised so I suspect the 3.5Gb is just hitting some form of limit.
- EDMX 2 - a separate set of 20 or so custom api's, appears to work correctly, the OpenApiDocument takes a few seconds to generate and uses very little memory
- EDMX 3 - the collection of all standard Microsoft Dynamics Business Central API V2 API's, I've never got this to finish, I've left it for over 30 minutes and it's used up to 20Gb of memory.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit Microsoft.OpenApi.OData.EdmModelOpenApiExtensions.ConvertToOpenApi() und reproduzieren Sie das Verhalten anhand der angehängten EDMX-Beispiele und der C#-Parsing-Sequenz im Issue. Vergleichen Sie das kleinere funktionierende Modell mit EDMX 1 und EDMX 3 und profilieren Sie dabei den Speicherverbrauch und die Generierungszeit. Als erledigt gilt die Aufgabe, wenn die problematischen EDMX-Dokumente ein OpenApiDocument ohne übermäßigen Speicherverbrauch oder scheinbares Hängen erzeugen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- csharp, openapi
- Bereich
- api, backend-api-design, performance
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100