IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web avec .NET Discussion :

Gros problème "out of memory" sur un site web


Sujet :

Développement Web avec .NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Gros problème "out of memory" sur un site web
    Bonjour à tous!

    J'ai un gros problème de débordement de mémoire sur un site web qui contient un volume très grande de:
    1. Données.
    2. Nb de fichiers javascript et css importés.
    3. Génération de strings coté serveur, qui sont incrustés dans le code html sous forme de tableaux, et objets JSON serialisés.

    Du moment où je lance le site, le processus Webdev.WebServer.EXE commence à utiliser la mémoire en arrivant jusqu'à 500Mo. Sur le site d'explitation, comme il y a plusieurs utilisateurs, ça monopolyse la mémoire jusqu'à qu'une erreur "Out of memory" bloque le site.
    Je pensais que c'étaient les connexions à bdd, mais j'utilise des pools de sites, et elles sont bien fermées. Par contre, j'ai détecté dans le deboggage que, dans la classe Singleton pour le traitement données coté serveur, au moment où j'initialise mes listes (tableaux), récupérées en utilisant linqToSql 3.5, ça monte à bloc. Quelqu'un peut me conseiller comment peux-je faire pour libérer cette mémoire une fois fini le traitement(la fermeture du navigateur ou du site)??

    Merci d'avance!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Peut-on voir le code que tu utilises pour charger tes données (un exemple) ?

    Ensuite il existe différents outils permettant de profiler la mémoire d'une appli, d'un site web, ...

  3. #3
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Citation Envoyé par petton Voir le message
    Par contre, j'ai détecté dans le deboggage que, dans la classe Singleton pour le traitement données coté serveur, au moment où j'initialise mes listes (tableaux), récupérées en utilisant linqToSql 3.5, ça monte à bloc. Quelqu'un peut me conseiller comment peux-je faire pour libérer cette mémoire une fois fini le traitement(la fermeture du navigateur ou du site)??
    Si c'est un singleton c'est que tu dois avoir une variable Static. Donc elle reste en mémoire (avec tous les objets qui y sont accrochés) tant que le AppPool de IIS n'est pas recyclé.
    Pourquoi un singleton ?

    Comme le dit ostenhard il y a des outils (notamment ceux inclus dans Visual Studio 2010) qui permettent d'analyser une application au niveau ressources.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  4. #4
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci de votre reponse, The_badger_man, ostenhard

    Par des raisons de temps de charge d'objets de la bdd très lourds, on avait pensé à l'époque que le fait d'utiliser une classe Singleton qui gardait ces objets en mémoire serveur, répondrait beaucoup plus vite aux demandes de différents clients.

    ostenhard, on charge les objets normalement, avec un select linq qui récupère tous les données d'une table, mais qui garde aussi tous les liaisons avec d'autres tables de la bdd.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    try
    {
         ITable tTable = dataContext.GetTable(typeof(TBase));
     
         var results = from rRow in (Table<TBase>)tTable
              where rRow is TEntity
              select (TEntity)rRow;
     
    StatList = results.ToList();
    }
    catch (Exception erreur)
    {                             
        throw erreur;
    }
    return StatList;
    J'ai remarqué aussi en lisant des questions assez similaires d'autres forums que le fait s'utiliser des strings est plus lourd, et qu'on devrait les libérer une fois fini la tâche. Dans ce site, on construit dans le code serveur des strings qui contiennent des tableaux dynamiques:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         <div class="grid_6">
              <%=DynamicLogoHTML%>
              <p>
                     <%=DynamicNameHTML%></p>
              <p>
                     <%=DynamicProductsHTML%></p>
         </div>
    Est-ce qu'il y a moyen de libérer toute cette mémoire utilisé pour la construction des pages html?
    Vous avez d'autres idées?

    Merci!!

  5. #5
    Membre confirmé Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Points : 577
    Points
    577
    Par défaut
    Je pense pas que essayer de gagner sur la mémoire utilisée pour construire tes page t'évitera l'erreur out off memory.
    Le problème c'est ton singleton :
    - soit la quantité de données a augmenté et aujourd'hui impossible de monter ce singleton en mémoire. Donc il faut limité sa taille en y mettant que ce qui est nécessaire.
    - soit le singleton n'est pas thread safe (pas bien) et du coup tu en montes plusieurs ce qui pourrait entraîner un montée en mémoire supplémentaire.

    Faudrait voir le code du singleton (entièrement) : il devrait y avoir un if(StatList == null) { ....}
    Il ne faudrait pas tout mettre dedans, juste les données de références qui ne bougent pas et les mettre dans une table de hash pour requêter directement dedans.

Discussions similaires

  1. très gros fichier et out of memory
    Par Narrow dans le forum Langage
    Réponses: 7
    Dernier message: 01/09/2010, 16h30
  2. [Liferay] Profiler pour problème de Out Of Memory
    Par Samaël63 dans le forum Portails
    Réponses: 0
    Dernier message: 22/06/2009, 12h06
  3. Problème de out of memory
    Par dodobn dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 08/06/2009, 01h13
  4. J'ai tjrs le problème de Out of Memory
    Par Socrat dans le forum C++Builder
    Réponses: 24
    Dernier message: 22/07/2007, 10h27
  5. "out of memory exception" sur un picturebox[VB 2005.net]
    Par philippe carel dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/07/2006, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo