Accueil > .Net, Développement, Sql Server > Optimisations C#, Entity Framework et Sql

Optimisations C#, Entity Framework et Sql

Ça fait un petit moment maintenant que je fais des tests de charges.
Le code n’était pas toujours optimisé au mieux, ce qui m’a posé divers problèmes : timeouts sur la base de données, explosions des requêtes Linq to Entities, Entity Framework à la ramasse…

Bref, j’ai du modifier pas mal de choses pour arriver à un résultat plus acceptable.
Dans ce billet, ce sera juste la situation générale et les liens vers les billets détaillant la résolution.

Dans un premier temps, voici grosso modo l’algorithme :

  1. Préparation du traitement
    1. Récupération des informations pour paramétrage
    2. Récupération de données de références pour les modifier et créer de nouvelles données
    3. Création en base des données de test
    4. Création d’un fichier en entrée
  2. Lancement du traitement
    1. Lecture du fichier
    2. Conversion du fichier en objets
    3. Validation des lignes
    4. Récupération des données complémentaires (connecté à la BDD)
    5. Création des nouvelles entrées (déconnecté)
    6. Insertion en base de données (transactionnel)
  3. Validation du test
    1. Récupération des lignes générées en BDD
    2. Validation des lignes

Si pour un test sur 500 lignes (quelques secondes), ça passe pas trop mal, sur 50.000, c’était pas franchement le même succès (près de 10 minutes).

Les points majeurs d’achoppement se situaient sur la récupération de la donnée de référence (point 1.2); insertion en base des données de test (les 50.000 lignes, point 1.3); récupération des données complémentaires (point 2.4) et enfin l’insertion en base de données des lignes traitées (2.6).

Pour les points 1.3 et 2.6, c’est le Bulk Insert qui m’a sauvé.
J’en ai parlé ici : [C#] Entity Framework et Bulk Insert.

Pour le point 1.2, c’est du SQL avec le hint FORCESEEK : [C#-TSQL] FORCESEEK et Entity Framework.

Et enfin, pour le point 2.4, c’est les requêtes compilées d’EF 5 : [C# EF5] Requêtes Compilées.

Au final, 50.000 lignes sont maintenant traitées en moins de 3 minutes (le scénario complet).
C’est plutôt pas mal, d’autant que le DBA m’a demandé de mettre quelques temporisation pour laisser respirer un peu la base de données (et permettre aux autres applications de tourner) ^^

Catégories :.Net, Développement, Sql Server
  1. Aucun commentaire pour l’instant.
  1. 30/01/2014 à 11:02
  2. 05/02/2014 à 22:42

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :