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 Forms Discussion :

[Windows Forms] Programme plante, mais le jour seulement !


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité(e)
    Invité(e)
    Par défaut [Windows Forms] Programme plante, mais le jour seulement !
    Bonjour,

    J'ai développé une chaîne algorithmique en C++ et réalisé une interface en Winforms. L'interface ne fait rien de transcendant, le truc le plus compliqué qu'elle ait est une liste d'images affichées, mais elle crée régulièrement des objets managés (normal).
    Mes algorithmes dépassent parfois -largement- la mémoire vive disponible (enfin je pense, et c'est "normal") et c'est la qu'intervient le problème... Quand je ne fait rien sur l'ordinateur, cela fonctionne (en mémoire virtuelle j'imagine), mais quand je suis devant, j'ai le droit à un ".Net out of memory".

    Avez-vous une quelconque idée de comment éviter un tel plantage ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    réponse conne et logique : Oui, en gérant mieux la mémoire

    Je suppose que si ton programme grossi en mémoire, c'est que tu dois faire soit une mauvaise gestion de ta mémoire, soit que tu gardes "TOUT" en mémoire et à ce moment là, y a pas vraiment de solution (sauf à changer de philosophie)

    Maintenant, peut-etre que ton module en C++ comporte des memory leaks (fuite mémoire)... et donc, contribue à ce problème.

    Idéalement, il faudrait que tu puisses laisser tourner l'ordi "tout" seul sans rien faire pour voir si l'utilisation de la mémoire de ton programme grossi au fur et à mesure et cela de façon logique par rapport aux traitements faits !

    Sans plus d'information sur le comportement de ton programme, il me sera difficile (et je ne pense pas être le seul dans ce cas) de t'aider d'avantage !

    The Monz, Toulouse

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Salut,

    En fait il n'y a pas de memory leak, en tous cas pas dans la partie non-managée. Il s'agit d'algorithmes relativement lourds (détection SIFT, etc.) et c'est normal qu'ils prennent beaucoup de mémoire.

    Sachant que le programme (sur les mêmes données) fonctionne quand je le lance la nuit et que je ne suis pas devant l'ordinateur, il s'agit surement d'un problème touchant à la partie managée de l'interface.

    Peut-être que des tableaux alloués en non managé savent aller dans la mémoire virtuelle, alors que des données managées, elles, ne savent pas et provoquent donc un out of memory ?

    En tous cas merci d'avoir répondu

  4. #4
    Membre très actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Par défaut
    franchement, ton titre fais marrer
    pour en revenir au problème, peut-être que, comme l'a dit TheMonz, tu gardes tout en mémoire. Pense à Disposer tes objets ou à revoir ta manipulation des objets. Juste une idée

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    L'allocation de la mémoire ne vient pas à priori de là.

    C'est L'OS qui t'alloue la mémoire !

    Après, la mémoire est allouée sur le tas ou sur le pile !

    Il existe des outils de suivi de gestion de mémoire en version d'essai.
    Je pense que tu aurais interêt à passer ce genre d'outil (profiler) sur ton
    application.

    Après, que ton application soit gourmande en mémoire est une chose, mais peut-etre est-il possible que des duplications de mémoire est lieu et que tu puisses t'en affranchir en codant certaines choses différemment ou en partageant les données d'une autre façon de sorte d'éviter un accroissement continu de la mémoire

    Après, si un algo, même lourds commence à dépasser les 500 Mo, peut-etre que ya moyen de faire quelque chose !!!

    The Monz, Toulouse

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Gloups, peut-être cela vient-il de mes lacunes en managé... Pour le moment je ne détruit rien, je laisse le programme s'en charger... faut-il lui forcer la main parfois/souvent ?

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par rich.gecko Voir le message
    Gloups, peut-être cela vient-il de mes lacunes en managé... Pour le moment je ne détruit rien, je laisse le programme s'en charger... faut-il lui forcer la main parfois/souvent ?
    En fait tu es dans le cas typique du code natif qui fonctionne bien mais qui n'est pas correctement géré par le code managé.

    En .NET ( donc coté managé) tu peux utiliser les ojets natif, c'est le P/Invoke. Mais si tu utilises des objets natifs, le GC ne sais pas les libérer. Le GC n'est la que pour s'occuper de gérer les objets managé. Pour palier à ce "problème" il existe une interface nommé IDisposable qui permet de dire "Attention cette classe est une classe managé mais contient des objets natifs qu'il faut détruire explicitement". Tout bon développeur qui rencontre une classe implémentant IDisposable sais qu'il doit faire appel à la méthode Dispose quand il a fini de se servir de la classe.

Discussions similaires

  1. [Débutant] windows form multiple dans mon programme
    Par QAYS dans le forum Windows Mobile
    Réponses: 0
    Dernier message: 03/12/2012, 11h00
  2. Réponses: 3
    Dernier message: 23/02/2012, 14h19
  3. Réponses: 5
    Dernier message: 02/05/2011, 14h30
  4. [VB.NET] windows form traits
    Par DG JohnJohn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2004, 15h05
  5. Escamoter la barre Windows par programme
    Par Invité dans le forum Windows
    Réponses: 4
    Dernier message: 01/06/2004, 16h03

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