UserControl lent (problème de performance)

Résolu/Fermé
Lus0rius Messages postés 26 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 29 juin 2021 - Modifié le 28 juin 2021 à 13:58
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 29 juin 2021 à 08:29
Bonjour,

J'utilise une liste pour afficher les fichiers qui se trouvent dans un dossier.
Cependant, j'ai simplement essayé d'implémenter la liste dans un UserControl, pour me permettre de l'utiliser sur plusieurs onglets, et le temps de mise à jour de la liste est devenu beaucoup plus long. Je ne parle pas du temps d'affichage du contrôle, mais bien du temps de refresh de la liste quand je change les fichiers à afficher.

Pour comparer :
- Hors UserControl, le temps entre le lancement du refresh et sa complétion se situe entre 0,008 et 0,029 seconde selon les essais.
- Dans un UserControl : entre 0,351 et 1,384 seconde.
J'ai utilisé le même code pour le listing de fichiers et les mêmes fichiers à lister.

Est-ce un comportement connu des UserControls ou y a-t-il une manipulation à faire pour remédier à cela ? Car j'hésite à me passer d'UserControl du coup...

Merci d'avance.

Configuration: Windows 10 / Langage : VB.NET Framework 4.7.2
A voir également:

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
28 juin 2021 à 20:15
C'est au début du message qu'il faut indiquer le langage.
Honnêtement, je ne regarde quasiment jamais, la conf ou la signature. Et je pense qu'on est nombreux dans ce cas.

Pour se faire une idée, au moins le code qui explore le dossier et le xaml qui affiche le résultat.

Cela dit, j'ai plusieurs fois un constat que je ne m'explique pas le "même" code en VB.Net et en C# ont des vitesses d'exécution sensiblement différentes en faveur de C#.
Pourtant en théorie, on devrait avoir le même exe IL à la fin....

1
Lus0rius Messages postés 26 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 29 juin 2021 6
29 juin 2021 à 00:18
D'accord, merci. Je me disais que ça suffirait de mettre le langage à la fin, étant donné que les mécanismes sont les mêmes en C#...

Bref, j'étais en train de copier mon code ici, et par curiosité j'ai essayé quelque chose. La seule différence entre les deux projets (celui avec UserControl et celui sans) était l'utilisation ou non de MahApps.Metro. Et en mettant le tag Style="{x:Null}" sur la liste du UserControl (pour enlever le style MahApps), surprise y a plus de lag...

Je ne pensais pas qu'un design d'interface pouvait produire un ralentissement aussi grand, mais il semblerait que si...

Je crois que demander de l'aide me permet toujours de trouver la solution, même si c'est par moi-même xD

Merci pour tes réponses tout de même et bonne soirée !
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931 > Lus0rius Messages postés 26 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 29 juin 2021
29 juin 2021 à 08:29
Ha ben si, l’interface c’est généralement le plus long.
Plus le design est compliqué plus c’est long
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
28 juin 2021 à 16:36
Bonjour

Sans plus d’infos (à commencer par le langage…, mais aussi la technologie d’interface, un bout de codes, etc.) je dirais que s’il y a plusieurs onglets, avec plusieurs usercontrole, alors il y a plusieurs listes qui se mettent à jour avec peut-être des accès concurrents sur le disque.
0
Lus0rius Messages postés 26 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 29 juin 2021 6
28 juin 2021 à 18:43
Le langage est indiqué en bas du message (VB.NET). Et effectivement, j'ai oublié de le préciser, j'utilise WPF.
Dans mes tests, je n'avais qu'un seul onglet ouvert, donc le risque d'interférence entre les onglets est éliminé.
J'utilise un UserControl pour chaque Header d'onglet (ce qui me permet d'ajouter/supprimer dynamiquement des onglets), et un autre UserControl pour la liste.
Un bout de code j'ai hésité à en mettre, mais je ne sais pas quoi... Le code qui gère la création/update de la liste ? Le XAML du UserControl de la liste ? En ce qui concerne le système d'onglets, il est fortement inspiré de cet article : https://www.codeproject.com/Articles/84213/How-to-add-a-Close-button-to-a-WPF-TabItem
Pour bien comprendre, voilà une image :
0