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 :

Améliorer les performances du WPF ?


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 71
    Points : 25
    Points
    25
    Par défaut Améliorer les performances du WPF ?
    Bonjour à tous

    Je suis en cours de développement d'une appliation C#

    Dans mon fichier XAML, j'ai un ItemsControl avec ma liste bindée en ItemsSource. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <ItemsControl x:Name="lvDataBinding" Foreground="AliceBlue" ItemsSource="{Binding LstAvis}" Margin="0" ScrollViewer.CanContentScroll="True" VirtualizingPanel.IsVirtualizing="True" VerticalAlignment="Top">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Border BorderBrush="White" BorderThickness="1" CornerRadius="3" Margin="{Binding strMargin}" Opacity="{Binding dblOpacityCurrent}" HorizontalAlignment="Left" VerticalAlignment="Top">
                                <Grid Width="{Binding dblWidth}" Height="{Binding strHeightGrid}" Tag="{Binding strNumAvis}" Margin="0.1" Background="{Binding scbColorCurrentSelected}"  >
                               </Grid>
                            </Border>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <UniformGrid Columns="1"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                </ItemsControl>
    Ensuite dans la partie behind de mon code je rempli une liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public void NewConstruct_View()
            {
                Application.Current.Dispatcher.Invoke(new Action(() => _lstAvistemp.Clear()));
     
                Dispatcher.Invoke(new Action(() => Mouse.OverrideCursor = Cursors.Wait));
     
                //Insere la liste dans l'objet qui permettra son affichage
                for (int i = 0; i <= dt_DATA.Rows.Count - 1; i++)
                {
                    Avis = new CL_Avis();
     
                    Avis.strNumAvis = dt_DATA.Rows[i]["QMNUM"].ToString();
     
                    Application.Current.Dispatcher.Invoke(new Action(() => _lstAvistemp.Add(Avis)));
                }
     
     
     
                Dispatcher.Invoke(new Action(() => LstAvis.ReplaceRange(_lstAvistemp)));
                Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null);
            }
    Seulement, mon application a besoin de 5 secondes pour exécuter la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null);
    et afficher ma grille à l'écran.

    J'ai seulement 500 lignes, et je trouve que c'est lent pour 500 lignes. Qu'en dites-vous ?

    Pour info le code ci-dessus est simplifié pour la lecture en réalité la grille est un peu plus complexe et je remplis une 20ène de champs dans ma liste dans le code behind.

    Je travaille dans un thread et ma liste est de type RangeObservableCollection.

    J'ai déjà corrigé les exceptions que j'avais :

    System.Windows.Data Error: 23 : Cannot convert '<null>' from type '<null>' to type 'System.Windows.Visibility' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: Conversion de EnumConverter impossible à partir de (null).
    à System.ComponentModel.TypeConverter.GetConvertFromException(Object value)
    à System.ComponentModel.TypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
    à System.ComponentModel.EnumConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
    à MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)'
    J'avais dans ma liste une variable de visibilité bindée dans mon XAML qui était à null, maintenant je la remplis à "Hidden" et c'est ok, plus d'exceptions.

    Comment améliorer les perfs ?

    Merci.

    Salutations

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    essaye de remplacer ContextIdle par Send
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    J'ai testé, sans succès malheureusement.

    D'autres pistes ?

    Merci.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    quel est le code qui exécuté par cet invoke ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Améliorer les performances d'Hibernate
    Par minimarch76 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 22/08/2007, 11h01
  2. Optimisation de jsp pour améliorer les performances
    Par djuddju dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/12/2006, 06h50
  3. Réponses: 2
    Dernier message: 01/08/2006, 11h20
  4. [IW][D7] améliorer les performances
    Par Magnus dans le forum Bases de données
    Réponses: 19
    Dernier message: 11/10/2005, 21h46

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