UserControl lent (problème de performance) [Résolu]

Signaler
Messages postés
26
Date d'inscription
samedi 28 janvier 2017
Statut
Membre
Dernière intervention
29 juin 2021
-
Messages postés
16109
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2021
-
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

2 réponses

Messages postés
16109
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2021
721
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....

Messages postés
26
Date d'inscription
samedi 28 janvier 2017
Statut
Membre
Dernière intervention
29 juin 2021
2
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 !
Messages postés
16109
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2021
721 >
Messages postés
26
Date d'inscription
samedi 28 janvier 2017
Statut
Membre
Dernière intervention
29 juin 2021

Ha ben si, l’interface c’est généralement le plus long.
Plus le design est compliqué plus c’est long
Messages postés
16109
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2021
721
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.
Messages postés
26
Date d'inscription
samedi 28 janvier 2017
Statut
Membre
Dernière intervention
29 juin 2021
2
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 :