November 28, 2022

Branches Tech

Engagé pour la qualité technologique

Conseils sur les performances de Entity Framework Core

7 min read
network speed

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 post, nous allons explorer certains des trucs et astuces qui peuvent vous aider à améliorer les performances de vos applications ASP.Internet Core 7 qui utilisent EF Main 7.

Pour travailler avec les exemples de code fournis dans cet article, vous devez avoir installé Visual Studio 2022 Preview sur votre système. Si vous n’en avez pas déjà une copie, vous pouvez téléchargez Visual Studio 2022 Preview ici.

Créer un projet d’API World-wide-web minimal ASP.Internet Core dans Visible Studio 2022 Preview

Tout d’abord, créons un projet ASP.Internet Core dans Visual Studio 2022. Suivez ces étapes pour créer un nouveau projet ASP.Web Core Website API 7 dans Visible Studio 2022 :

  1. Lancez l’IDE Visual Studio 2022 Preview.
  2. Cliquez sur “Créer un nouveau projet”.
  3. Dans la fenêtre “Créer un nouveau projet”, sélectionnez “API Net ASP.Internet Core” dans la liste des modèles affichés.
  4. Cliquez sur Suivant.
  5. Dans la fenêtre “Configurer votre nouveau projet”, spécifiez le nom et l’emplacement du nouveau projet.
  6. Cochez éventuellement la scenario « Placer la solution et le projet dans le même répertoire », selon vos préférences.
  7. Cliquez sur Suivant.
  8. Dans la fenêtre “Informations supplémentaires” affichée ensuite, sous Framework, sélectionnez .Internet 7. (Aperçu).
  9. Décochez la case qui dit “Utiliser des contrôleurs…” car nous utiliserons un minimum d’API dans cet exemple. Laissez le “Style d’authentification” défini sur “Aucun” (par défaut).
  10. Assurez-vous que les scenarios à cocher “Activer Docker”, “Configurer pour HTTPS” et “Activer la prise en cost de l’API ouverte” sont décochées motor vehicle nous n’utiliserons aucune de ces fonctionnalités ici.
  11. Cliquez sur Créer.

Nous utiliserons ce projet d’API Website ASP.Internet Core 7 pour travailler avec Entity Framework Core 7 dans les sections suivantes de cet posting.

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 .Internet Core.

Entity Framework Main facilite la mise en œuvre de l’accès aux données dans vos programs .Internet Core, car or truck il vous permet de travailler avec la foundation de données à l’aide d’objets .Web. EF Core vous permet d’écrire du code pour exécuter des steps 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 additionally 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 additionally 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 fit 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 dismiss 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).

Moreover vital 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 software. 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 in addition 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. En outre, 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 remark obtenir des données de manière paginée. Remarquez comment l’index de la webpage 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.Just take(pageSize)
.Skip(startingPageIndex * pageSize)
.ToList()

Divisez votre contexte de données volumineux en plusieurs contextes de données furthermore petits

Le contexte de données dans votre application représente votre foundation 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 Main, 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 exclusive, 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 vulnerable de générer des allers-retours supplémentaires inutiles, ce qui pourrait ralentir votre application. Vous pouvez désactiver le chargement différé en spécifiant ce qui suit dans votre contexte de données :

ChangeTracker.LazyLoadingEnabled = fake

Utiliser le regroupement DbContext

Une software 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 application 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 Method.cs.

builder.Products and services.AddDbContextPool(options => alternatives.UseSqlServer(link))

Cet write-up 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 comparer vos performances EF Core avant et après avoir appliqué ces modifications pour évaluer les résultats de votre software spécifique. Un exceptional outil pour cette tâche est BenchmarkDotNet, que vous pouvez lire dans un report précédent.

Copyright © 2022 IDG Communications, Inc.

Leave a Reply