May 30, 2023

History Tech

Fournisseurs de technologie

network speed

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 posting, 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 Core 7.

Pour travailler avec les exemples de code fournis dans cet short article, 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 Web nominal ASP.Internet Main 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.Net Main World-wide-web API 7 dans Visual 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 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 circumstance « Placer la remedy 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 .Web 7. (Aperçu).
  9. Décochez la case qui dit “Utiliser des contrôleurs…” automobile nous utiliserons un bare minimum d’API dans cet exemple. Laissez le “Kind 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 car nous n’utiliserons aucune de ces fonctionnalités ici.
  11. Cliquez sur Créer.

Nous utiliserons ce projet d’API Internet ASP.Web Main 7 pour travailler avec Entity Framework Main 7 dans les sections suivantes de cet write-up.

Qu’est-ce qu’Entity Framework Core ?

Entity Framework est le mappeur relationnel objet (ORM) de Microsoft pour .Web. Entity Framework Main est la version open up source et multiplateforme d’Entity Framework pour .Web Main.

Entity Framework Core facilite la mise en œuvre de l’accès aux données dans vos programs .Net Main, motor vehicle il vous permet de travailler avec la base de données à l’aide d’objets .Internet. EF Core vous permet d’écrire du code pour exécuter des actions 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 Main, vous pouvez moreover 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 moreover 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 Core disregard 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).

In addition 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 moreover 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 page de début et la taille de la website page ont été utilisés pour choisir uniquement les données requises.

int pageSize = 50, startingPageIndex = 1
var dataContext = new OrderProcessingDbContext()
var knowledge = dataContext.Orders.Take(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 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 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 furthermore 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 Main est apte à charger automatiquement les entités associées à partir de la foundation 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 suit dans votre contexte de données :

ChangeTracker.LazyLoadingEnabled = false

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 Main 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 Software.cs.

builder.Services.AddDbContextPool(solutions => solutions.UseSqlServer(connection))

Cet report a fourni une discussion 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 fantastic outil pour cette tâche est BenchmarkDotNet, que vous pouvez lire dans un posting précédent.

Copyright © 2022 IDG Communications, Inc.