Conseils sur les performances de Entity Framework Core
Vous pouvez améliorer les performances d’accès aux données dans Entity Framework Core de plusieurs manières. Celles-ci incluent l’activation du chargement rapide, la désactivation du chargement différé, l’utilisation du streaming au lieu de la mise en mémoire tampon et la désactivation du suivi des modifications. Dans cet short article, nous allons explorer certains des trucs et astuces qui peuvent vous aider à améliorer les performances de vos apps ASP.Web Main 7 qui utilisent EF Main 7.
Pour travailler avec les exemples de code fournis dans cet posting, vous devez avoir installé Visible Studio 2022 Preview sur votre système. Si vous n’en avez pas déjà une copie, vous pouvez téléchargez Visible Studio 2022 Preview ici.
Créer un projet d’API Net minimal ASP.Net Core dans Visual Studio 2022 Preview
Tout d’abord, créons un projet ASP.Internet Main dans Visible Studio 2022. Suivez ces étapes pour créer un nouveau projet ASP.Internet Core Website API 7 dans Visual Studio 2022 :
- Lancez l’IDE Visible Studio 2022 Preview.
- Cliquez sur “Créer un nouveau projet”.
- Dans la fenêtre “Créer un nouveau projet”, sélectionnez “API World wide web ASP.Internet Core” dans la liste des modèles affichés.
- Cliquez sur Suivant.
- Dans la fenêtre “Configurer votre nouveau projet”, spécifiez le nom et l’emplacement du nouveau projet.
- Cochez éventuellement la circumstance « Placer la option et le projet dans le même répertoire », selon vos préférences.
- Cliquez sur Suivant.
- Dans la fenêtre “Informations supplémentaires” affichée ensuite, sous Framework, sélectionnez .Internet 7. (Aperçu).
- Décochez la circumstance qui dit “Utiliser des contrôleurs…” vehicle nous utiliserons un minimum amount d’API dans cet exemple. Laissez le “Sort d’authentification” défini sur “Aucun” (par défaut).
- Assurez-vous que les situations à cocher “Activer Docker”, “Configurer pour HTTPS” et “Activer la prise en demand de l’API ouverte” sont décochées car or truck nous n’utiliserons aucune de ces fonctionnalités ici.
- Cliquez sur Créer.
Nous utiliserons ce projet d’API Internet ASP.Web Main 7 pour travailler avec Entity Framework Core 7 dans les sections suivantes de cet post.
Qu’est-ce qu’Entity Framework Main ?
Entity Framework est le mappeur relationnel objet (ORM) de Microsoft pour .Web. Entity Framework Core est la edition open up supply et multiplateforme d’Entity Framework pour .Web Core.
Entity Framework Main facilite la mise en œuvre de l’accès aux données dans vos apps .Web Core, car or truck il vous permet de travailler avec la foundation de données à l’aide d’objets .Internet. EF Main vous permet d’écrire du code pour exécuter des actions CRUD (créer, lire, mettre à jour et supprimer) sans comprendre comment les données sont conservées dans la foundation de données sous-jacente. À l’aide d’EF Main, vous pouvez in addition facilement récupérer des entités à partir du magasin de données, ajouter, modifier et supprimer des entités et parcourir des graphiques d’entités.
Meilleures pratiques en matière de performances EF Core
Vous pouvez aider EF Main à effectuer ces opérations d’accès aux données furthermore rapidement en tirant parti de quelques bonnes pratiques. Nous aborderons ci-dessous cinq de ces meilleures pratiques.
Désactiver le suivi des modifications pour les scénarios en lecture seule
Chaque fois que vous interrogez des entités dans votre DbContext, le contexte match les objets renvoyés afin que vous puissiez les modifier et conserver les modifications. Si la requête est une requête en lecture seule, c’est-à-dire si aucune modification ne sera apportée aux données renvoyées, le contexte n’est pas requis pour effectuer cette tâche. Vous devez désactiver le suivi des modifications s’il n’est pas nécessaire.
Vous pouvez désactiver le suivi des modifications pour des requêtes individuelles en incluant la méthode AsNoTracking dans la requête. Lorsque la méthode AsNoTracking est utilisée, EF Main ignore l’effort supplémentaire de suivi des entités, améliorant ainsi les performances (en particulier pour les requêtes impliquant un grand nombre d’entités).
Additionally important encore, vous n’avez pas besoin de suivi des modifications lorsque vous avez uniquement l’intention de récupérer des données dans votre application. En d’autres termes, si vous souhaitez uniquement récupérer des données à partir du contexte de données, sans insérer, mettre à jour ou supprimer des données, vous n’avez pas besoin d’activer cette fonctionnalité. Vous pouvez désactiver le suivi des objets en ajoutant le code suivant à votre classe de contexte de données.
ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking
L’essentiel est que les requêtes qui utilisent AsNoTracking s’exécuteront additionally rapidement que les requêtes qui ne l’utilisent pas. Cependant, n’oubliez pas que vous ne devez jamais utiliser AsNoTracking dans les requêtes qui insèrent, modifient ou suppriment des entités. De plus, si vous devez insérer, modifier ou supprimer des données à l’aide du contexte de données, vous devez éviter de spécifier le QueryTrackingBehavior au niveau du contexte de données.
Récupérez uniquement les données dont vous avez besoin
Lorsque vous traitez des volumes massifs de données, vous devez vous efforcer de récupérer uniquement les enregistrements requis pour la requête spécifique. Lors de la récupération des données, vous devez utiliser des projections pour sélectionner uniquement les champs obligatoires. Vous devez éviter de récupérer des champs inutiles. L’extrait de code suivant montre comment obtenir des données de manière paginée. Remarquez comment l’index de la web site de début et la taille de la web site ont été utilisés pour choisir uniquement les données requises.
int pageSize = 50, startingPageIndex = 1
var dataContext = new OrderProcessingDbContext()
var information = dataContext.Orders.Get(pageSize)
.Skip(startingPageIndex * pageSize)
.ToList()
Divisez votre contexte de données volumineux en plusieurs contextes de données moreover petits
Le contexte de données dans votre application représente votre base de données. Par conséquent, vous pouvez vous demander si l’application ne doit avoir qu’un ou plusieurs contextes de données. Dans Entity Framework Core, le temps de démarrage d’un contexte de données volumineux représente une contrainte de performances importante. Par conséquent, au lieu d’utiliser un vaste contexte de données unique, vous devez diviser le contexte de données en plusieurs contextes de données plus petits.
Idéalement, vous ne devriez avoir qu’un seul contexte de données par module ou unité de travail. Pour utiliser plusieurs contextes de données, créez simplement une nouvelle classe pour chaque contexte de données et étendez-la à partir de la classe DbContext.
Désactiver le chargement différé
Le chargement différé est une fonctionnalité qui élimine le besoin de charger des entités liées inutiles (comme dans le chargement explicite) et semble empêcher le développeur de traiter entièrement les entités liées. Étant donné qu’EF Core est apte à charger automatiquement les entités associées à partir de la base de données lorsqu’elles sont accessibles par votre code, le chargement paresseux semble être une fonctionnalité intéressante.
Cependant, le chargement différé est particulièrement susceptible de générer des allers-retours supplémentaires inutiles, ce qui pourrait ralentir votre software. Vous pouvez désactiver le chargement différé en spécifiant ce qui accommodate dans votre contexte de données :
ChangeTracker.LazyLoadingEnabled = wrong
Utiliser le regroupement DbContext
Une application a généralement plusieurs contextes de données. Étant donné que les objets DbContext peuvent être coûteux à créer et à éliminer, EF Main offre un mécanisme pour les regrouper. En regroupant, les objets DbContext sont créés une seule fois, puis réutilisés si nécessaire.
L’utilisation d’un pool DbContext dans EF Core peut améliorer les performances en réduisant la surcharge impliquée dans la création et la suppression d’objets DbContext. Par conséquent, votre software peut également utiliser moins de mémoire.
L’extrait de code suivant illustre comment vous pouvez configurer la mise en pool de DbContext dans le fichier Application.cs.
builder.Providers.AddDbContextPool(options => choices.UseSqlServer(relationship))
Cet short article a fourni une dialogue sur les meilleures pratiques qui peuvent être adoptées pour améliorer les performances d’accès aux données dans EF Main. Bien sûr, chaque application a des exigences et des caractéristiques d’accès aux données différentes. Vous devez évaluer les performances de votre EF Main avant et après l’application de ces modifications pour évaluer les résultats de votre application spécifique. Un excellent outil pour cette tâche est BenchmarkDotNet, que vous pouvez lire dans un article précédent.
Copyright © 2022 IDG Communications, Inc.