[C#] Charger un combobox plus rapidement

Charger un combobox plus rapidement [C#] - C#/.NET managed - Programmation

Marsh Posté le 01-10-2018 à 10:05:30    

Hello :)
 
J'ai un petit problème today :o
 
Dans mon programme, je fais charger, via une DB, une liste contenant toutes les communes de France. Pour éviter d'attaquer la base en boucle, au chargement de l'appli, je viens créer une list contenant des objets de type commune.
 
Mon soucis, quand j'ai besoin de ses communes, je charge ma combo de cette façon :  
 

Code :
  1. comboBox_commune.DataSource = OutilsParametres.Communes;
  2. comboBox_commune.DisplayMember = "Libelle";
  3. comboBox_commune.ValueMember = "Id";
  4. comboBox_commune.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
  5. comboBox_commune.AutoCompleteSource = AutoCompleteSource.ListItems;


 
En soit, tout fonctionne bien, mais cela prend quasi 1 min à ouvrir la fenêtre, le temps que la combo charge.
 
Une idée de comment réduire encore ce temps ?  
 
Thanks :jap:

Reply

Marsh Posté le 01-10-2018 à 10:05:30   

Reply

Marsh Posté le 01-10-2018 à 22:36:31    

Des remarques en vrac :
 
- Tu as bien pensé à mettre un BeginUpdate / EndUpdate autour ?
 
- Il me semble qu'il faut affecter DisplayMember / ValueMember AVANT le datasource sinon ça revient quasiment à tout charger deux fois. Ca vaut peut être aussi pour d'autres propriétés que tu utilises.
 
- Tu ne peux pas charger les items au démarrage comme tu fais, mais binder le combo plus tard (au select par exemple ?)
 
- Tu as bien vérifié que le plus lourd est le binding du combo et pas le chargement depuis la base ? Sinon pense à faire ça en asynchrone
 
- Tu le fais via quel événement (constructeur, load, etc) ?


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 01-10-2018 à 22:40:09    

Du coup le plus lourd c'était vraiment l'affichage des champs, et non pas le fait de lui donner les valeurs.
 
J'ai fait une petite fonction qui vient charger que les éléments rentrant dans les critères du début de sélection.
 
exemple :  
 
Le combo est toujours vide par défaut. Le mec tape "Par", si il ne tape plus rien pendant 1 sec, je vais choper tout les éléments de type communes contenant "Par" dans ma list<commune> et je les charge. Niveau ergo c'est sympa, niveau chargement c'est rapide, donc c'est parfait :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed