microsoft / microsoft/OpenAPI.NET.OData
EntityModel.ConvertToOpenApi method memory usage
Personne n'a encore pris cette issue.
- Langage dominant
- C#
- Étoiles
- 240
- Forks
- 70
- Merge moyen
- 7 h 59 min
- PR mergées (30 j)
- 13
Description
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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par Microsoft.OpenApi.OData.EdmModelOpenApiExtensions.ConvertToOpenApi() et reproduisez le comportement à l’aide des exemples EDMX joints et de la séquence d’analyse C# indiquée dans l’issue. Comparez le modèle fonctionnel plus petit avec EDMX 1 et EDMX 3 tout en profilant l’utilisation de la mémoire et le temps de génération. Le travail est considéré comme terminé lorsque les documents EDMX problématiques produisent un OpenApiDocument sans utilisation excessive de la mémoire ni blocage apparent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- csharp, openapi
- Domaine
- api, backend-api-design, performance
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100