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

Windows Mobile .NET Discussion :

C# optimisation de la mémoire


Sujet :

Windows Mobile .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 1
    Par défaut C# optimisation de la mémoire
    Bonjour à tous,

    Je suis face à un problème épineux concernant la gestion de la mémoire. Lorsque je navigue dans mon application, j'affiche des formulaires qui font appelle à une base de donnée.
    Mais lorsque je ferme un formulaire et que celui-ci n'a plus de référence dans l'execution du programme, il ne décharge pas la mémoire. Et comme un formulaire prend en moyenne 2 Mo, la mémoire est vite saturée.

    J'ai essayé de forcer la garbage collector a travailler en appelant la méthode GC.Collect() après la fermeture de la fenetre mais je gagne à peine 500Ko.

    Quelqun aurait-il une idée pour résoudre mon problème?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Au risque de paraître un peu bateau, je dirais qu'il ne faut pas hésiter à utiliser la méthode "Dispose" de tous les objets que tu utilises, et qui implémentent "IDisposable". Essaie de le faire lors du form Unload ?

    En effet, "Dispose" sert à marquer un objet comme étant éligible au prochain garbage collection. Ca équivaut à le mettre à la poubelle...

    Ne pas employer "Dispose" équivaut à garder cet objet, sans le mettre à la poubelle...

    Au prochain passage du "garbage collector", la poubelle est vidée, et la place occupée devient disponible.

    Sinon, la mémoire utilisée par un processus en code managé affichée par le task manager n'est réellement significative qu'après un garbage collection, car celle-ci inclus la consommation des objet "disposés" en attente d'un garbage collection.

    Vous pouvez faire le test avec Visual Studio (écrit partiellement en code managé) avec le task manager ouvert à côté : lorsqu'on minimise VS dans la barre de tâche, un garbage collector est déclenché, et la différence de mémoire utilisée par le process devenv.exe est terrible !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Par défaut
    Citation Envoyé par ControlBreak
    Vous pouvez faire le test avec Visual Studio (écrit partiellement en code managé) avec le task manager ouvert à côté : lorsqu'on minimise VS dans la barre de tâche, un garbage collector est déclenché, et la différence de mémoire utilisée par le process devenv.exe est terrible !
    Non Non Non Non et Non!
    La valeur indiquée par le gestionnaire usage dans la colonne dans "Mem usage" est le "working set". C'est a dire la mémoire actuellement allouée DANS LA RAM pour l'application. Cette valeur peut-être plus élevée que ce que consomme réellement l'application (parceque windows a prévu plus de ram que demandé "au cas ou") ou plus bas que ce qu'elle consomme (parcequ'une partie de la mémoire de l'applicationà été enlevée de la RAM et mise dans le pagefile).
    Ce qui se passe quand on minimise une application (n'importe quelle application, pas uniquement celles écritent en .NET) c'est que windows met une bonne partie de la mémoire utilisée dans le fichier d'échange.


    Pour avoir une idée relativement correcte de l'utilisation de mémoire par une application c'est la colonne "VM size" dans le gestionnaire de tâche, elle s'ajoute via le menu "view>select columns".

    Plus d'info pour ceux qui veulent :
    http://www.itwriting.com/dotnetmem.php
    http://www-128.ibm.com/developerwork...ry/j-memusage/


    Edit: je viens de voir que ce topic est dans la section "Compact Framework" et donc pas de gestionnaire de tache sous Pocket PC/SmartPhone...Mais ce que j'ai dit reste valide.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Mince alors, j'étais, mais alors persuadé qu'il y'avait une opération de GC lors du minimize d'une application managée !

    Merci pour la leçon: tes liens sont très instructifs, et ça m'apprendra à vérifier mes sources avant de poster !

  5. #5
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Bonjour à tous, ayant à peu près le même problème, je manipule des algorithmes necessitant beaucoup de mémoire qui est rapidement saturé.
    La mémoire ram allouée à mon prog n'est que de 20 Mo et je ne sais commet l'augmenter... est ce que vous pouvez m'aider ??

    Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Par défaut
    Petit up de ce post car j'ai le même soucis

Discussions similaires

  1. [WD16] Optimisation affichage table mémoire
    Par Pascal26120 dans le forum WinDev
    Réponses: 4
    Dernier message: 02/11/2011, 20h37
  2. Optimisation de la mémoire
    Par Ganondorf dans le forum Débuter
    Réponses: 14
    Dernier message: 06/01/2011, 06h23
  3. Optimisation de la mémoire
    Par souminet dans le forum Débuter
    Réponses: 16
    Dernier message: 21/10/2008, 09h24
  4. Optimisation de la mémoire pour Oracle
    Par farenheiit dans le forum Administration
    Réponses: 25
    Dernier message: 14/01/2008, 13h47
  5. Optimisation de la mémoire
    Par alexadvance dans le forum Visual C++
    Réponses: 2
    Dernier message: 15/03/2007, 12h05

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