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

Dotnet Discussion :

[C#][.NET 2.0]Augmentation de mémoire


Sujet :

Dotnet

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut [C#][.NET 2.0]Augmentation de mémoire
    Bonjour,

    Je développe une application en C# depuis 1 ans dejas et un gros problème se pose a moi. Lorsque mon application fonctionne je peux observer une augmentation de la mémoire. Pour les heures qui quivent ce n'est que très peu remarquable mais sur une semaine de fonctionnement l'augmentation est ennorme. Connaissez vous un moyen de Tracer dans mon code les objets non supprimés ? Il y a t'il une liste d'objet ou de situation en .Net a observer afin de ne pas avoir ce genre de problème (Situation : envoi de message, com réseau, délégates).

    Merci

  2. #2
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Bonjour,

    Vous pouvez utiliser les compteurs de performances (Icone Performance présente dans le menu 'Outils d'administration'.). Vous pouvez monitorez la mémoire CLR.NET

    Apparement votre application semble être un serveur qui tourne en continu.

    Possède t elle une interface graphique? Si oui, en la passant en Service ou application console, vous réduirez déjà la mémoire utilisée par les composants graphiques.

    De manière générale, essayer de faire le moins d'allocations mémoire possible. Faites des systemes de cache.

    Pouvez vous donnez plus de détails sur l'application? Quelle est la quantité de mémoire atteinte en 1 semaine?

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut Alors
    Effectivement l'application est une appliserveur qui tourne en continu. Puis le problème d'augmentation est dejas assez important sur 2 jour je passe a 800 Mo lol l'appli en fonctionnement normal utilise environ 250 mo ce qui est normal

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Mon bouquin de C# dit ceci:

    Les fuites mémoire subsitent malgré la présence d'un ramasse-miettes. En effet, un développeur peut, par inadvertance, concevoir un programme qui garde des références vers des objets dont il n'a plus besoin (par exemple si une collection gonfle indéfiniment). Cependant, la cause la plus courante des fuites de mémoire d'une application .NET est la non désallocation de resources non gérées.
    Sinon, tu peux essayer de forcer le clr à nettoyer la mémoire en utilisant la classe System.GC, particulièrement la fonction Collect().

    Bon courage

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut l'éternel problème
    Alors j'ai essayer cette solution mais bon j'ai vu que c'était déconseillé ... J'aimerais savoir si il existe un outils pour observer les objets crées et les objet détruis ou disposer. Avec ceci je pense que je pourrais plus facilement observer le comportement de mon appli ... Une autre question est il possible avec le CLR Profiler d'observer non pas toute une appli mais seulement une classe ou une assembly ???

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Points : 2 629
    Points
    2 629
    Par défaut
    Hello merci de ton aide pour la fuite de mémoire mais j'ai toujours mes soucis dans ce domaine on m'a donc conseillé d'abuser de IDisposable de ne faire aucun destructeur. De ne pas oublier de Disposer et d'assigner a null des variables avant de faire de grosses opération pour éviter le passage en gen supérieure. Mais j'ai encore des memory leak et aussi une utilisation du proc assez importante. Visiblement ce serai du au GC pour le proc mais je ne sais pas vraiment comment observer les memory leak existe t'il une methode qui me permettrais d'identifier les bjet non détruits ? et la raison de ces memry leak ?
    Bonjour,
    Merci de ne pas m'envoyer de questions par MP.

    Je ne connais pas d'outil permettant d'observer les memory leak en dotnet.
    Si le processeur est beaucoup utilisé, je ne pense pas que ça vienne du GC car il ne se lance pas tout le temps. Sauf peut être si vous faites tout le temps en continu des allocations mémoires relativement importante.
    Dans ce cas, même en implementant IDisposable ça ne suffira peut être pas.

    Il faudrait penser à faire un system de cache.
    si vous devez par exemple envoyer ou recevoir des données dans une socket, n'instancier pas à chaque fois une nouvelle variable buffer. Utiliser un buffer par opération (lecture/écriture) et par socket. ou bien gérer un pool de buffer.

    C'est juste un exemple car je n'ai aucune idée du genre d'allocations que votre application fait.

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut Bonjour
    Alors j'ai enfin trouver une solution pour mon problème j'avais 2 type de memory leak

    1. au niveau de mes dataset typés
    2. au niveau d'une gestion de liste d'item qui était mise a jour toutes le 0.10 s les sub items de mes items n'étaient pas détruits

    Sinon dans les logiciels de monitoring vive le CLR Profiler et le compteur de perf windows.

    Merci a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#, .net 2.0] Libération de mémoire non managée
    Par SesechXP dans le forum C++/CLI
    Réponses: 2
    Dernier message: 08/12/2006, 09h00
  2. commetn augmenter la mémoire
    Par chouchou93 dans le forum Eclipse Java
    Réponses: 14
    Dernier message: 27/06/2006, 12h09
  3. [Outils][VB.NET] Comment observer la charge mémoire ?
    Par blau dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 20/01/2006, 10h12
  4. [VB.NET][dataset] libérer de la mémoire
    Par JauB dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/01/2006, 12h58
  5. [MFC] Augmentation en mémoire
    Par pitch21 dans le forum MFC
    Réponses: 21
    Dernier message: 20/07/2004, 13h01

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