Sql Server : Quelques astuces pour optimiser vos requêtes

Voici quelques astuces qui peuvent aider à optimiser vos requêtes sql.

1- Parmi les colonnes se trouvant dans la clause SELECT ne doivent êtres présentent uniquement les colonnes nécessaires. chaque colonnes de la requête nécessite des opérations I/O et de la bande passante.

2 – L’utilisation du SELECT * FROM … est très fortement déconseillé.

2- Seule les lignes nécessaires doivent être retournées. Ne pas faire retourner 10000 lignes par l’application alors que l’on a besoins de voir uniquement les 10 ères. (exemple d’un datagrid paginé).
La fonction ROWNUMBER permet de faire de la pagination en tsql.
Plus d’infos sur cette fonction ici: http://msdn.microsoft.com/fr-fr/library/ms186734.aspx

3- Ne pas utiliser le DISTINCT ou UNION si l’unicité n’est pas nécessaire.

4- Dans le cas d’utilisation d’un CURSEUR, pensez à le fermer et  le désalouer le plus tôt possible.

5- L’utilisation des Procédures stockés est recommandée, surtout si le temps d’exécution d’une requête n’est pas prédit.
Les procédures stockés ont l’avantage d’avoir un temps d’execution fiable, car leur exécution ne demandent pas de recompilation.
Plus d’infos ici: http://www.codeproject.com/Articles/414272/Stored-Procedures-DO-NOT-increase-performance

Lire la suite

Liens du 21/02/2012

Récemment j’ai découvert un blog qui propose très régulièrement des liens vers des articles de développement sur tout ce qui touche à la technologie Micrososft.

J’ai trouvé cette idée très intéressante, je vais donc proposer régulièrement des liens vers des articles ou des sites qui seront aussi bien des liens de développement .net que sur du développement Front Office (Javascrip, Jquery, Css, HTML, …)

Voici donc mon 1er topic de liens :

Lire la suite

TechDays 2012 : Développer le potentiel de IIS7.5

1-      Introduction

Toute optimisation doit passer par une phase d’étude et d’identification, aucune optimisation ne se fait à priori.

2-      IIS7.5

IIS 7.5 possède 2 modes:

- Classic mode pipeline: les requêtes passent par un module isapi qui est externe à IIS

- Intégré:

Il permet de souscrire à des event Begin,..

Il possède le  module d’authentification qui est natif

Il est possible d’écrire des modules (c++, c#, ..) pour influencer le traitement de la requête tout au long du pipeline.

Le processus exécuté par IIS est w3wp, il contient plusieurs Thread et chacun d’eux ont leur but.

Toutes les requêtes passent par des modules d’où le ralentissement des fichiers statique.

En ASP.Net MVC, il est possible de modifier ce contenu en mettant la clé de config (web.config)  RunAllManagedModule à True

Les avantages:

- Applique tous les modules automatiquement à tous les types de contenus

- moins de configuration unitaire

Les inconvénients:

- Overhead d’activation des modules managés

- Effet de bord du à l’activation de modules non implémentés à cet effet.

Lire la suite

Asp.net : Passer le viewstate en session

Le viewstate pose souvent des problèmes, parmi les plus connus :

  • Taille de page importante
  • Corruption du viewstate
  • Blocage au niveau de google qui n’aime pas trop ce champ
  • Champs non crypté par défaut, présentant une exposition et une altération possible des valeurs contenues dedans par un utilisateur mal intentionné.

Même si le meilleur conseil serait d’essayer de ne pas l’utiliser, il fait quand même partie du Framework et il faut composer avec.

Principe de base

L’idée est de surcharger le comportement du framework pour la gestion du viewstate afin de la passer en session. On pourrait imaginer tout autre mécanisme de stockage (bdd, fichier,…) mais la mémoire reste le moyen le plus rapide de travailler sur ces données.

Il faut quand même gérer certains cas liés aux sessions :

  • Un même utilisateur peut ouvrir plusieurs fois la même page, les viewstate doivent être différents
  • Les sessions peuvent être désactivées

Lire la suite

Visual Studio : Add on- Optimiseur d’image

Je viens de découvrir un add-on à Visual Studio qui permet d’optimiser les images et ceci avec un click droit directement à partir de Visual Studio:

- il optimises toutes les formats d’images web (jpg, png, gif) sans perte de qualité

- il peut traiter aussi bien une image que un répertoire entier

- il permet aussi leur intégration directement dans les css

Son téléchargement

quelques screenshoot:

Asp.Net – Mise en cache

Voici un point sur les differentes facon d’utiliser le cache en asp.net

Introduction:

En Asp.net il existe 2 type de caches:

- le cache du rendu de la page : OutputCache

- Le cache applicatif qui permet de mettre en cache des objets.

1- Le OutputCache

Pour mettre en cache le rendu d’une page il faut mettre la directive @OutputCache dans la page:

<%@ OutputCache Duration="60" VaryByParam="None"%>

Les paramètres obligatoires sont : Duration et VaryByParam( ou VaryByControl)

Duration: définit la durée de maintien d’une entrée de cache dans le cache de sortie

VaryByParam: paramètres de chaîne de requête ou de Form POST que le cache de sortie utilise pour faire varier l’entrée du cache (délimitée par des virgules)

Remarque: ces parametres peuvent etre placé dans le web.config s’il s’appliquent à l’ensemble du site

Lire la suite

Optimisation mémoire C#

Il se pose souvent la question de l’optimisation de la mémoire quand on commence à coder des programmes gourmands ou des services qui ne s’arrêtent jamais, il en va de même pour les applications Web.

Le Framework de Microsoft, tout comme Java possède un garbage collector (ramasse miette) qui va gérer la mémoire pour vous. Ce travail est un travail de fond dont on n’a pas à se soucier 90% du temps. Il faut cependant avoir en tête que les ressources ne sont pas infinies est qu’un processus .net ne peut avoir que 60% (configuration machine.config) de la mémoire vive allouée à un processus par le système. Heureusement il est possible d’agir sur ce garbage collector et de l’aider à mieux gérer votre application.

Principe de base

Pour cela il est important de comprendre un principe de base du Framework, les ressources managées et les ressources non managées.

Ressources managées :

On entend par ressources managées toutes les variables dont le type est entièrement géré par le Framework (ex : Int32, String, StringBuilder, XmlDocument,…).

Ces ressources vont entièrement être la charge du Framework et il a la main sur la gestion mémoire de ces objets.

Ressources non managées :

On entend par ressources non managées toutes les ressources qui font appels à des intervenants extérieurs, en général le système d’exploitation (ex : les connexions base de donnée, le système de fichier, la couche graphique Windows, les bitmap basés sur GDI+).

Ces ressources possèdent tout le temps une méthode Dispose() qui permet d’appeler les méthode qui vont relâcher les objets non managés que le Framework ne va pas savoir gérer correctement.

Il est capitale d’appeler les méthodes dispose le plus rapidement possible dès qu’on a plus besoin de ses ressources et surtout de prévoir le cas ou on ne pourrait pas passer dans le code appelant le dispose suite à une exception avant cet appel. Plusieurs patterns permettent de garantir cela de façon optimal :

Lire la suite