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

Silverlight Discussion :

MVVM, fuite de mémoire (?), debuggage


Sujet :

Silverlight

  1. #1
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut MVVM, fuite de mémoire (?), debuggage
    Bonjour tt le monde,

    J'utilise (ou j'essaie) le pattern MVVM avec MVVMLight. J'ai développé un liste un peu sympa sur cette idée. (un espèce de powerpivot du pauvre). En gros c'est une listbox améliorée.
    Mon problème c'est que lorsque je charge beaucoup d'éléments (enriron 250 ce qui n'est pas non plus le bout du monde), mon appli commence à peiner franchement (scroll lent, etc...). Je précise que sur chaque element, il y a un menu contextuel (celui du toolkit), pour pouvoir effectuer des actions.

    Voici mes questions:
    - Comment debugger cela? (outils?)
    - Que doit-on faire dans le cleanup d'un viewmodel
    - A quoi doit on faire attention avec le MVVM au niveau de la desallocation de données?
    - comment surveiller réellement l'utilisation CPU/mem de mon appli ?
    - j'ai d'abord pensé que c'était un problème lié à une mauvaise/sur-utilisation du context menu, mais en l'enlevant rien n'y fait.

    Problème supplémentaire: quand je change d'écran, le problème est toujours là...

    Je suis preneur de tout type d'idées ? !!!

    Christophe

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Pour l'ItemContainerStyle de ta ListBox, tu as pensé à utiliser un VirtualizingStackPanel ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Pour l'ItemContainerStyle de ta ListBox, tu as pensé à utiliser un VirtualizingStackPanel ?
    Dans l'ItemsPanel plutôt

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    @Thomas & @tomlev: merci ! Apparemment le problème se situe à ce niveau là. J'ai substitué mon conteneur dans mon template d'ItemsPanel de ma liste box par le VirtualizingStackPanel, et ça supporte la charge...
    Maintenant, mon problème c'est que j'utilisais un WrapPanel du toolkit. L'effet donné n'est pas du tout le même à présent (tout sur une ligne ou colonne suivant l'orientation).
    Comment opérer ? Y-at-il un équivalent en mode wrappanel ?

    Pourquoi le wrappanel de base ne supporte-t-il pas la virtualization ? Ca le rend inutilisable du moment qu'on a un peu de données. Y-a-t-il des cas où la virtualisation plombe les perfs pour que ça ne soit pas le mode par défaut?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    Pourquoi le wrappanel de base ne supporte-t-il pas la virtualization ?
    Sans doute parce que la virtualisation est nettement plus compliquée à implémenter pour un WrapPanel...

    Citation Envoyé par chrisdot Voir le message
    Ca le rend inutilisable du moment qu'on a un peu de données.
    Et c'est probablement pour ça qu'aucun ItemsControl n'a un WrapPanel comme panel par défaut

    On trouve quelques implémentations de VirtualizingWrapPanel sur le net (ici par exemple), mais plutôt pour WPF... cela dit, ça peut sans doute être adapté pour Silverlight.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    J'ai rien trouvé de probant pour Silverlight... J'ai trouvé ça, mais lorsque les données deviennent dynamiques, ça explose.

    Sinon, par rapport à ma question initiale: pourquoi y-a-t-il une fuite mémoire si je n'utilise pas de virtualization ?

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    Sinon, par rapport à ma question initiale: pourquoi y-a-t-il une fuite mémoire si je n'utilise pas de virtualization ?
    Ce n'est pas une fuite mémoire en soit: c'est juste que le moteur créé des containers pour tous les items de ta collection de départ, même ceux qui ne sont pas visibles. Utilise un VSP permet de ne créer des containers que pour les éléments visibles

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Ce n'est pas une fuite mémoire en soit: c'est juste que le moteur créé des containers pour tous les items de ta collection de départ, même ceux qui ne sont pas visibles.
    Merci, mais ça je l'ai bien compris: ma question est plutôt pourquoi dans le cas de l'utilisation d'un simple wrappanel, la mémoire n'est jamais désallouée... (y compris qd je sors de l'écran en question... )
    J'ai cru comprendre qu'en utilisant les behavior et le pattern MVVM, on peut avoir quelques problemes (si les behaviors n'utilisent pas les weakreferences??)

Discussions similaires

  1. fuite de mémoire ?
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 12/01/2006, 16h19
  2. Réponses: 1
    Dernier message: 02/12/2005, 14h18
  3. fuite de mémoire
    Par mamag dans le forum MFC
    Réponses: 17
    Dernier message: 19/08/2005, 10h42
  4. Fuite de mémoire en utilisant le template list
    Par schtroumpf_farceur dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2005, 20h44
  5. Réponses: 8
    Dernier message: 17/10/2002, 12h52

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