none
comment ameliorer les performances de mon application asp.net RRS feed

  • Discussion générale

  • bonjour à tous,

    nous sommes actuellement en phase de test pré-prod de notre application asp.net (C#), et là un certain nombre de questions liées aux performances se posent.

    nous avons remarqué lors de ces tests que qu'on est en réseau local (1GB/S de débit), les perfs de l'application sont plutôt moyennes, par contre sur un site distant (entre 4Mb/s et 8Mb/s de débit ADSL) le temps de réponse est catastrophique.

    et là je voudrais savoir s'il y'a des astuces particulières pour résoudre ce problème.

     j'ai vu dans certains articles qu'il faudrait désactiver le mode de débogage lors du déploiement, maintenant s'il y'a d'autres solutions je suis preneur.

    Merci d'avance.

    • Type modifié Aurel Bera jeudi 31 octobre 2013 08:49 Discussion
    vendredi 18 octobre 2013 11:07

Toutes les réponses

  • Bonjour,

    Votre problème est lié à la quantité de données qui sont échangés entre le serveur et le client (navigateur).
    La désactivation du mode débogage ne permet en aucun cas d'améliorer la bande passante, cela améliore les performances d'exécution...

    Pour résoudre ce problème, il n'y a donc pas de magie, vous devez optimiser le nombre de requêtes effectuées et la taille de vos requêtes. Pour cela vous devez améliorer les points suivants (qui sont les plus importants) :

    • Les images (améliorer la compressions, supprimer les metadata, utiliser les sprites).
    • Mettre en cache les css / javascript en essayant de les réutiliser d'une page à l'autre.
    • Eviter les cookies
    • Optimiser l'utilisation du ViewState (si vous êtes dans WebForms).

    Le mieux est d'utiliser FireBug (extension de Firefox) et d'identifié l'élément téléchargé qui met le plus de temps à se télécharger...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    samedi 19 octobre 2013 03:54
    Modérateur
  • Bonjour scania113

    Avez-vous des nouvelles pour nous?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 21 octobre 2013 08:54
  • bonjour et merci pour votre réponse...

    effectivement, nous avons remarqué qu'a chaque requête des éléments statiques de mes pages se rafraîchissent, et je pense notamment à les mettre en cache surtout la Master Page.

    auriez vous une documentation ou un tuto montrant comment réaliser ces opérations.

    cordialement,

     

    lundi 21 octobre 2013 11:08
  • N’est pas possible d’utiliser un mécanisme de cache pour la masterpage d’une manière très simple.

    Vous allez trouver cet article intéressant. 

    http://www.codeproject.com/Articles/444421/How-to-manipulate-master-page-controls-in-ASP-NET

    Aussi si j'ai bien compris vous avez besoin d’utiliser un mécanisme de cache de coté client qui dépend de  l’explorateur utilisée.  Normalement l'explorateur vas cacher les images, fichiers CSS, et les éléments statiques. 

    Donc je dirais de commencer l'optimisation avec la BD.

    Aussi vous pouvez utiliser l’assistant de performance :

    http://msdn.microsoft.com/fr-fr/library/2s0xxa1d.aspx

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 21 octobre 2013 12:02
  • Bonjour,

    Qu'appelez vous par éléments statiques de la page ? Des images ? Des CSS ? Du blabla HTML généré par ASP .NET ? Du blabla HTML brut ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    lundi 21 octobre 2013 15:23
    Modérateur
  • bonjour,

    oui c'est cela, les images bannière, le menu, le code html généré par asp.net...


    lundi 21 octobre 2013 16:40
  • Bonjour,

    Vous devez donc chercher dans un premier temps à comprendre pourquoi vos images sont si importantes à télécharger...

    Normalement imaginons que l'on a un page A avec 10 images (8 dans la MasterPage + 2 dans la page), si vous accédez à la page B avec 12 images (toujours 8 dans la MasterPage et 4 dans la page), le navigateur va récupérer uniquement les 4 nouvelles images car les 8 autres sont déjà dans le cache. Le navigateur ne mettre pas en cache les images si vous changez de nom entre les 2 pages ou si vous le spécifiez explicitement dans la requête HTTP.

    Au niveau des images, ne pouvez vous pas les compresser pour réduire leur taille ?

    Avez-vous regardé au niveau de FireBug les temps de chargement ? Avez-vous regardé aussi la taille de votre page ? Elle est de combien ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mardi 22 octobre 2013 00:53
    Modérateur
  • bonjour

    je cherche à optimiser le plus possible mon application.

    j'ai vu l'article suivant :http://msdn.microsoft.com/en-us/library/ff647787.aspx

    donc tous ce qui pourrait améliorer la rapidité de mon application est le bien venu, sauf que je ne trouve pas de documentation détaillée.

    je voulais d'abord commencer par la mise en cache, parce qu'il semble que c'est la plus efficace, donc dans la méthode load() de ma master Page j'ai introduis le code suivant :

    Response.Cache.SetExpires(DateTime.Now.AddMonths(1));
    Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
    Response.Cache.SetValidUntilExpires(true);

    toutefois, j'ai un quelques questions par rapport à ce code.

    HttpCacheability.ServerAndPrivate signifie bien que les pages qui sont liées à cette masterpage seront mise en cache dans le serveur et le client ??

    DateTime.Now.AddMonths(1) signifie bien qu'après un mois le cache client sera rafraichit après un mois ??

    Merci d'avance

     


    • Modifié scania113 mardi 22 octobre 2013 16:47
    mardi 22 octobre 2013 16:45
  • Bonjour scania113

    Ici vous avez les détails sur le HttpCacheability http://msdn.microsoft.com/fr-fr/library/system.web.httpcacheability.aspx.

    DateTime.Now.AddMonths(1) signifie bien qu'après un mois le cache client sera rafraichit après un mois ??

    Oui!

    Mais faites attention SVP. Si vous utilisez des variables session pour afficher des pages, le cache ne le prend pas en compte et vous allez voir des informations enregistrées dans le cache pour une autre valeur de la variable Session.   

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 23 octobre 2013 12:25
  • Merci beaucoup pour votre mise en garde,

    parce que effectivement j'utilise plusieurs objets sessions dans mon application, et après test j'ai remarqué que la valeur ne change pas ....

    il y'a t-il une solution à ce problème ou alors il va falloir que désactive la mise en cache ??

    mercredi 23 octobre 2013 13:56
  • Soit pour les pages ou vous utilisez des sessions vous désactivez le cache soit vous envoyez dans chaque lien vers une page avec session un paramètre  de type "mapage.aspx?dummyparam=" + Guid.NewGuid().

    Comme ça vous forcez de ne pas prendre en compte le cache.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera mercredi 23 octobre 2013 14:07
    mercredi 23 octobre 2013 14:07
  • Bonjour scania113

    Avez-vous des nouvelles pour nous?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 25 octobre 2013 10:18
  • bonjour Aurel,

    je me demandais q'il y'a une possibilité de vider les objets sessions (uniquement) du cache à chaque déconnexion ?

    dimanche 3 novembre 2013 13:42
  • Bonjour,

    Cela se fait automatiquement dès que le visiteur ne donne pas de signe de vie au bout de 20 minutes.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    dimanche 3 novembre 2013 23:31
    Modérateur
  • Bonjour

    N’est pas très clair ce que vous voulez faire.  

    Pouvez-vous nous donner plusieurs détails ?

    Voir si c’est bien votre cas :

    http://forums.asp.net/t/1366105.aspx

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 4 novembre 2013 08:22
  • bonjour à tous,

    désolé d'avoir tarder à vous répondre, je reviens vers vous pour décrire en détail ce que j'ai fait et ce que je voudrais savoir pour la mise en cache.

    alors par rapport à ce que j'ai fait, j'ai activé dans un premier temps la mise en cache au niveau de ma master page en faisant ça :

    Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
    Response.Cache.SetExpires(DateTime.Now.AddHours(1));
    Response.Cache.SetValidUntilExpires(true);

    après exécution j'ai remarqué une nette amélioration mais les objets session gardent leurs contenus (session["utilisateur"]), même en changeant d'utilisateur.... donc c'est pour cela que j'ai posé la question s'il y'a possibilité de faire exception de la mise en cache des objets session, ou alors les vider après déconnexion..... 

    la deuxième chose que j'ai faite et qui semble marcher sans problème, c'est la mise en cache de mon fichier css au niveau du serveur IIS, et j'avoue que ça permit d'améliorer un peu les performances.

    cordialement,

    vendredi 8 novembre 2013 15:00
  • Bonjour,

    Comme je vous l'ai dit la libération des objets de session se fait automatiquement dès que le visiteur ne donne pas de signe de vie au bout de 20 minutes.

    Vous avez la possibilité de diminuer ce timeout en réglant la propriété timeout de l'élément sessionState de votre fichier web.config :

    http://msdn.microsoft.com/fr-fr/library/h6bb9cz9.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    lundi 11 novembre 2013 22:39
    Modérateur
  • bonjour Gilles,

    justement je ne parle pas de durée d'inactivité des objets sessions, mais plutôt de leur mise en cache.

    je veux soit ne pas mettre en cache les objets sessions, soit les effacés du cache dès que l'utilisateur se déconnecte.

    merci d'avance.

    mercredi 13 novembre 2013 18:19
  • Bonjour,

    J'ai du mal à comprendre votre problème...

    Les objets de sessions sont mis en mémoire sur le serveur durant toute la vie d'une session utilisateur.
    Qu'est ce qu'une session ASP .NET ? Elle est crée lorsqu'un nouveau visiteur entre dans votre site. La session (et donc tout ce qui est en mémoire) est ensuite détruite après 20 min si l'utilisateur n'a pas fait de requête... Si l'utilisateur fait une requête durant ces 20 min, il retrouvera ses objets de sessions et il faudra attendre encore 20 minutes pour que ASP .NET vide ses objets en mémoire.

    je veux soit ne pas mettre en cache les objets sessions
    Dans ce cas n'utilisez pas l'objet Session....

    soit les effacés du cache dès que l'utilisateur se déconnecte.
    C'est automatique par ASP .NET...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 13 novembre 2013 19:57
    Modérateur
  • bonjour,

    je reviens avec des nouvelles...

    en fait nous avons opté pour la mise en cache tel que c'est indiqué plus haut, après nous avons constaté que le nom de session reste celui de l'utilisateur précédant et ne change que suite au premier post back....

    et là je me pose des questions ....

    1- est ce que cela comporte t-il un risque ??? y'a t-il un moyen pour éradiquer ceci ??

    2- la mise en cache des pages se fait elle sur le client ou sur le serveur ??

    Merci 

     

     

    jeudi 21 novembre 2013 11:54
  • bonsoir,

    je signale aussi que j'ai un problème avec les boolean qui gardent leur état à cause de la mise en cache  ....

    samedi 23 novembre 2013 18:54
  • A suivre ici:

    http://social.msdn.microsoft.com/Forums/fr-FR/6d4ac694-cebb-485d-8148-b8d032a26fb5/performance-application-aspnet?forum=aspnetfr

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 9 décembre 2013 10:41