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

Framework .NET Discussion :

Probleme de memoire dans une application


Sujet :

Framework .NET

  1. #1
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut Probleme de memoire dans une application
    Salut

    J ai actuellement des problemes de memoire dans mon application ; application qui peut gerer beaucoup d objet.... et biensur arrive a un moment je me retrouve sans memoire.

    Le probleme n est pa stant la gestion des objets mais vraiement dans certains cas il peuvent etre nombreux.
    L application est pour le moment "bloque" en 32 bits (memoire max de ~2go pour l application)... je ne peux pas passer en 64 parce que l application utilise une bdd ACCESS.

    Donc ma question est : est ce qu il y aurait une methode/ un moyen de prevenir un "futur" manque de memoire ?

    Merci d avance

  2. #2
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    As-tu vraiment besoin de tous ces objets en mémoire à un instant t ?

    Sinon tu peux faire un système de cache local, par exemple basé sur SQLite, pour y stocker les objets sérialisés; le plus simple, et sans doute le plus rapide, étant la sérialisation binaire .Net.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Malheureusement, pour le moment, oui.
    Les differents objets proviennent deja d une base de donnee ; le nombre va dependre des requetes, et des objects affiches que l utilisateur va vouloir "utiliser".


  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    2 Go en mémoire pour une application, c'est beaucoup.

    A priori, comme ça, je dirais que tu dois avoir des fuites mémoires.
    Il existe des outils pour mesurer ça.
    En vrac, non exhaustif : ANTS Memory profiler, .NET Memory Profiler, dotTrace, JustTrace...

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Complément
    Afin d'essayer d'être plus précis dans les réponses, souriez vous nous indiquer si vous utilisé également du code non managé ?
    Tous vos objets utilisent-il IDisposable ?
    Ne serait-il pas possible d'utiliser un pattern de type Prototype ?

  6. #6
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Salut

    Oui il y du code unmanage ; et tout est bien disposé

    Le "hic" est vraiement qu il peut y avoir enormement d objets en memoire ; cela va dependre de ce que va ouvrir l utilisateur (jusqu a 500 000 records)


  7. #7
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Salut

    Personne aurait des trucs et astuces pour trouver des problemes de memoire ... j ai avec des tool mais ils "plantent"
    Ce que je trouve "etrange" c est que parfois l application monte parfois jusqu a 1,4 go ; mais je recois toujours l exception "OutOfMemory" aux alentours de 1,1go

    Merci d avance

  8. #8
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    j'ai pas d'outils pour les fuites mémoire (étant développeur C je sais ce que je fais :grossefrime: ).

    Par contre effectivement, y'a un souci de conception, une appli qui prend même 1Go c'est trop.
    Tu parles par exemple de 500.000 enregistrements "utiles", mais comment l'utilisateur peut voir/utiliser 500.000 enregistrements d'un coup ?
    Si t'as besoin de faire des calculs savants, fais les en PL/SQL.
    Si tu veux les afficher utilise un fonctionnement en stream/paging (ne charge pas tout d'un coup).
    Enfin, si tu fait du .NET autant éviter le code unsafe, car tu passes à côté d'un des points les plus intéressants du bousin.

    NB : ta DB est une Access ? Ton fichier taille combien en lui-même ?
    Plus je connais de langages, plus j'aime le C.

  9. #9
    Membre averti Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 187
    Points : 369
    Points
    369
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Enfin, si tu fait du .NET autant éviter le code unsafe, car tu passes à côté d'un des points les plus intéressants du bousin.
    Oui, plus de questions que de réponses pour l'instant ...

    - Sur une appli 32 bits, je colle jusqu'à 20 millions d'objets en mémoire sans soucis donc 500K, je serai curieux de voir la structure des données et des objets.

    Pourrais tu nous donner quelques infos sur le domaine d'application, les classes utilisées, etc ... ?
    La nature fait des choses extraordinaires, observons la et restons humble, on ne nous demande pas de refaire le monde mais juste de reproduire virtuellement des choses existantes ....

    et n'oubliez pas si vous aimez et quand vous avez la réponse

  10. #10
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    Salut

    La bdd fait environ 600Mo ; disons que pour le moment je ne peut pas modifie une partie du code qui gere l affichage des enregistrements, justement pour j avais penser a la solution de paging.

    Le chargement en lui meme ne pose pas de probleme ; le truc c est que des classes supplementaires sont genere correspondant a des elements graphiques ; et je pense que quelque chose se mort la queue mais j arrive pas a mettre la main dessus


  11. #11
    Membre averti Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 187
    Points : 369
    Points
    369
    Par défaut
    Citation Envoyé par Seth77 Voir le message
    Le chargement en lui meme ne pose pas de probleme ; le truc c est que des classes supplementaires sont genere correspondant a des elements graphiques ; et je pense que quelque chose se mort la queue mais j arrive pas a mettre la main dessus

    Peut etre que dans tes classes, il y a un constructeur qui en fait un peu trop - surtout trop tot.

    les éléments graphiques, tu en as juste besoin pour dessiner, peut etre qu'en transformant la génération des elements graphique en propriété calculée ça pourrait suffire (en mode juste à temps).

    si tu as un exemple de classe, ça nous aiderai ....
    La nature fait des choses extraordinaires, observons la et restons humble, on ne nous demande pas de refaire le monde mais juste de reproduire virtuellement des choses existantes ....

    et n'oubliez pas si vous aimez et quand vous avez la réponse

  12. #12
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Ce que je trouve "etrange" c est que parfois l application monte parfois jusqu a 1,4 go ; mais je recois toujours l exception "OutOfMemory" aux alentours de 1,1go
    Peut-être un problème du Garbage collector qui n'arrive pas à avoir la main.

    Essaie d'appeler cette procedure avant de demarrer un code faisant beaucoup d'alllocations d'objets.

    Pour des raisons de performance, le paramètre SizeToAllocate vérifie si la mémoire correspondante n'est plus disponible pour ne faire une garbage collection (lente) que dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    internal static void CollectGarbage(int SizeToAllocateInMo)
        { // set SizeToAllocateInMo to -1 to force garbage collection without testing available memory. 
          long [,] TheArray ;
          bool DoCollect=SizeToAllocateInMo<0 ;
          if (!DoCollect) try { TheArray = new long[SizeToAllocateInMo,125000] ; } catch { DoCollect=true ; }
          TheArray=null ;
          if (DoCollect) 
          { 
            GC.Collect() ; 
            GC.WaitForPendingFinalizers() ; 
            SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle,-1,-1) ;
            GC.Collect() ; 
          }
        }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  13. #13
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Salut,

    Utilise tu un ORM pour l'accès à la BDD?
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

Discussions similaires

  1. probleme de requete sql dans une application ejb
    Par ensatTetouan dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 01/03/2012, 22h27
  2. Probleme d'icone dans une application
    Par Seth77 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 07/12/2011, 11h45
  3. un probleme dans une application de gestion de stock
    Par dimainfo dans le forum Langage
    Réponses: 1
    Dernier message: 23/07/2007, 09h41
  4. Réponses: 3
    Dernier message: 29/05/2007, 20h37
  5. [linker]Probleme avec SDL dans une application Ogre3D
    Par smarties dans le forum Visual C++
    Réponses: 2
    Dernier message: 15/01/2007, 14h29

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