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 article, nous allons explorer certains des trucs et astuces qui peuvent vous aider à améliorer les performances de vos applications ASP.Net Core 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 Visual Studio 2022 Preview ici.

Créer un projet d’API Net small ASP.Web Core dans Visible Studio 2022 Preview

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

  1. Lancez l’IDE Visible Studio 2022 Preview.
  2. Cliquez sur “Créer un nouveau projet”.
  3. Dans la fenêtre “Créer un nouveau projet”, sélectionnez “API Website ASP.Net 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 .Net 7. (Aperçu).
  9. Décochez la case qui dit “Utiliser des contrôleurs…” automobile nous utiliserons un least d’API dans cet exemple. Laissez le “Variety d’authentification” défini sur “Aucun” (par défaut).
  10. Assurez-vous que les circumstances à cocher “Activer Docker”, “Configurer pour HTTPS” et “Activer la prise en charge 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 Web ASP.Web Core 7 pour travailler avec Entity Framework Main 7 dans les sections suivantes de cet write-up.

Qu’est-ce qu’Entity Framework Main ?

Entity Framework est le mappeur relationnel objet (ORM) de Microsoft pour .Net. Entity Framework Core est la edition open resource et multiplateforme d’Entity Framework pour .Internet Main.

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 base de données à l’aide d’objets .Net. EF Core vous permet d’écrire du code pour exécuter des steps CRUD (créer, lire, mettre à jour et supprimer) sans comprendre remark les données sont conservées dans la base de données sous-jacente. À l’aide d’EF Core, vous pouvez plus 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 Main

Vous pouvez aider EF Core à effectuer ces opérations d’accès aux données as well as 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 accommodate 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 significant 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 as well as 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 moreover, 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 website page de début et la taille de la web page ont été utilisés pour choisir uniquement les données requises.

int pageSize = 50, startingPageIndex = 1
var dataContext = new OrderProcessingDbContext()
var info = dataContext.Orders.Get(pageSize)
.Skip(startingPageIndex * pageSize)
.ToList()

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

Le contexte de données dans votre software 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 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 distinctive, vous devez diviser le contexte de données en plusieurs contextes de données as well as 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 prone 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 = bogus

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 remark vous pouvez configurer la mise en pool de DbContext dans le fichier Application.cs.

builder.Services.AddDbContextPool(options => solutions.UseSqlServer(relationship))

Cet report 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 Core. Bien sûr, chaque software 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 application spécifique. Un fantastic outil pour cette tâche est BenchmarkDotNet, que vous pouvez lire dans un post précédent.

Copyright © 2022 IDG Communications, Inc.

Leave a Reply

Next Post

Revue Scosche BoomCan MS : M est pour l'aimant (pas merveilleux)

En un coup d’œil Take note d’expert Avantages Extrêmement easy Étanchéité IP67 Le dos magnétique ajoute de la flexibilité Les inconvénients La qualité audio fait cruellement défaut Aucune commande embarquée d’aucune sorte Cher pour ce que vous obtenez Notre avis Ce haut-parleur Bluetooth portable et long lasting a l’air mignon […]
Scoshe BoomCan MS