WiX

J’avais déjà parlé de WIX dans un billet : How to Start : WIX (ça peut être utile de le lire en premier, si vous ne connaissez pas WiX).
Je suis récemment revenu dessus pour créer un installeur "un peu" custom.

Au programme, donc :

  • Ajouter une icône au programme
  • Déployer des fichiers dans un sous-répertoires
  • Modifier un champ dans l’App.Config depuis l’installeur
  • Paramétrer la chaîne de connexion EF depuis l’installeur
  • Déboguer les Custom Actions
  • Passer des paramètres à l’installeur

Lire la suite…

Catégories:.Net, C#, WIX

TechDays 2014 – Rediffusion des lives

TechDays2014Petite brève au passage.
Les rediffusion des lives des trois jours sont disponibles.

Toutes les vidéos des sessions filmées sont annoncées pour le mi mars.

Catégories:Evènements, TechDays

TechDays 2014 – Sécurité

Donc, hier, je suis allé voir la session Stratégie de sécurité Microsoft. Et aujourd’hui, je suis allé voir la session La sécurité de l’emploi : protégez votre SI.

Les deux sessions ont été assez intéressantes et complémentaires sur certains points.
Dans ce billet, je vais donc faire un retour de ce que j’en ai retenu.

Lire la suite…

Fier d’être développeur

TechDays 2014 – Jour 1

Et voilà, nouvelle années, nouveaux Tech Days.
Aujourd’hui, l’événement commence avec une plénière très sympa.

Comme l’année dernière, une plénière, trois séances et pis s’en va !

  • La plénière : Votre futur est dans le code
  • Stratégie de sécurité Microsoft
  • Le futur du Responsive Web Design
  • Développer ou debugger ?

Allez, petit retour, donc.

Lire la suite…

[C# EF5] Requêtes Compilées

Ce billet fait suite à la petite série sur l’optimisation.
La situation est expliquée ici Optimisations C#, Entity Framework et Sql, donc je n’y reviendrais pas.

Ce billet va traiter d’une optimisation au niveau de LINQ : les requêtes compilées.

Le scénario :
J’ai une liste de N éléments, peut être 1, mais dans mon test de charge : 50.000.
Chaque élément est un objet contenant une agrégation logique des plusieurs autres objets que je peuple au fil des traitements.
Je dois peupler l’un d’eux à partir d’une table très grosse (la même table qu’avant, avec ces 75 millions d’entrées).

Lire la suite…

Catégories:.Net, C#, Développement

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) ^^

Suivre

Recevez les nouvelles publications par mail.

Joignez-vous à 55 followers