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 Presentation Foundation Discussion :

Affichage d'un grand nombre d'images - performances


Sujet :

Windows Presentation Foundation

  1. #1
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut Affichage d'un grand nombre d'images - performances


    Quel est le meilleur moyen d'afficher un grand nombre d'images (~1500) en WPF sans sacrifier les performances ? Pour l'instant j'ai essayé avec un WrapPanel et bien que pour <20 images c'est nikel ce qu'il me faut, à peine arrivé à 100 images ça devient super saccadé et le processeur en prends un coup (100% de CPU à chaque défilement).

    Y a t-il un meilleur moyen pour le faire ?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Dans ton WrapPanel, tu as pensé à modifier le template pour utiliser un VirtualizingStackPanel ? Car avec de la virtualization, tu devrais avoir de meilleures perf

  3. #3
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Mais je veux avoir un comportement où les élément s'arrange verticalement mais horizontalement aussi, ce que ne permet pas VirtualizingStackPanel ... me trompe-je ?

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Points : 341
    Points
    341
    Par défaut
    Effectivement, je suis pas sûr qu'avec un VirtualizingStackPanel tu es l'effet que tu veux.

    Tu peux jeter un œil par là, où l'auteur réaliser un panel virtualisé qui devrait correspondre à ce que tu cherches.
    www.japf.fr mon blog sur WPF et .Net

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par smyley Voir le message
    Mais je veux avoir un comportement où les élément s'arrange verticalement mais horizontalement aussi, ce que ne permet pas VirtualizingStackPanel ... me trompe-je ?
    Rien ne t'empêche de créer ton propre VirtualizingWrapPanel en te basant sur le même code

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Jérem22 Voir le message
    Effectivement, je suis pas sûr qu'avec un VirtualizingStackPanel tu es l'effet que tu veux.

    Tu peux jeter un œil par là, où l'auteur réaliser un panel virtualisé qui devrait correspondre à ce que tu cherches.
    Quand j'essaye j'ai une erreur assez étrange (que ce soit dans le designer ou pendant l'exécution, bien que dans le projet d'exemple ça fonctionne pas au design mais ça marche à l'exécution) :
    La substitution des mesures de présentation de l’élément «*VirtualizingTilePanelSample.VirtualizingTilePanel*» ne doit pas renvoyer PositiveInfinity comme DesiredSize, même si Infinity est transmis sous forme de taille disponible.
    à System.Windows.UIElement.Measure(Size availableSize)
    à MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
    à System.Windows.Controls.ItemsPresenter.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
    à System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
    à System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
    à System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
    à System.Windows.Controls.Grid.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Control.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.DockPanel.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
    à System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Decorator.MeasureOverride(Size constraint)
    à System.Windows.Documents.AdornerDecorator.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
    à System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
    à System.Windows.Controls.Grid.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Border.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Border.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.DockPanel.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Border.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Grid.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Control.MeasureOverride(Size constraint)
    à MS.Internal.WindowControl.DesignTimeWindow.MeasureOverride(Size availableSize)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à MS.Internal.Designer.SimpleViewManager.DesignerBackground.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Decorator.MeasureOverride(Size constraint)
    à Microsoft.Windows.Design.Interaction.DesignerView.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à MS.Internal.Designer.Viewport.MeasureOverride(Size availableSize)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
    à System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
    à System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
    à System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
    à System.Windows.Controls.Grid.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Grid.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
    à System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Controls.Control.MeasureOverride(Size constraint)
    à System.Windows.FrameworkElement.MeasureCore(Size availableSize)
    à System.Windows.UIElement.Measure(Size availableSize)
    à System.Windows.Interop.HwndSource.SetLayoutSize()
    à System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
    à System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
    à MS.Internal.Designer.VSIsolatedDesigner.ViewHolder.Initialize()
    à MS.Internal.Designer.VSIsolatedDesigner.ViewHolder..ctor(UIElement content)
    à MS.Internal.Designer.VSIsolatedDesigner.VSIsolatedView.get_ViewHandle()
    à MS.Internal.Host.Isolation.IsolatedView.get_ViewHandle()
    à MS.Internal.Designer.DesignerPane.LoadDesignerView()
    Je vois pas d'où ça vient ...

    Citation Envoyé par Thomas Lebrun Voir le message
    Rien ne t'empêche de créer ton propre VirtualizingWrapPanel en te basant sur le même code
    Je suis pas encore assez fort en WPF pour ça

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par smyley Voir le message
    Je vois pas d'où ça vient ...
    Pourtant, c'est écrit

    La substitution des mesures de présentation de l’élément «*VirtualizingTilePanelSample.VirtualizingTilePanel*» ne doit pas renvoyer PositiveInfinity comme DesiredSize, même si Infinity est transmis sous forme de taille disponible.
    Autrement dit, dans la surcharge de MeasureOverride, j'ai l'impression qu'il renvoit Infinity comme valeur...

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Autrement dit, dans la surcharge de MeasureOverride, j'ai l'impression qu'il renvoit Infinity comme valeur...
    Oui, ça aurai pu aller ... si la fonction MeasureOverride était overridée ...
    J'avais justement essayé de regarder toutes les divisions du code en question sans jamais réussir à voir d'où vient ce Infinity (un division par 0, il ne doit pas y avoir d'autre moyen ...).
    Je vais devoir reprendre chaque fonction une par une ...

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    En même temps:

    It works with the December/January CTP
    Entre temps, il y a eu des changements donc je ne serais pas surpris que le code ait besoin d'être modifié...

Discussions similaires

  1. Affichage d'un grand nombre d'objets
    Par Shindo dans le forum GLUT
    Réponses: 6
    Dernier message: 04/10/2011, 16h51
  2. [WPF] Afficher un grand nombre d'images
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/07/2011, 21h31
  3. [Graphics View] Galerie d'images avec un grand nombre d'images
    Par feda12 dans le forum Qt
    Réponses: 3
    Dernier message: 09/02/2011, 23h27
  4. Affichage d'un grand nombre (double)
    Par gofono_bass dans le forum C++
    Réponses: 4
    Dernier message: 01/06/2008, 13h51
  5. Réponses: 2
    Dernier message: 22/12/2005, 18h16

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