Contrôle MenuStrip - Load des ToolStripMenuItems [Résolu]

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Bonsoir le Forum,

Suite à export d'un fichier xml, je dispose d'une List(Of) me permettant d'alimenter un DataGridView.
MyJobs = (From k In MyList, a In k.Applications, j In a.Jobs
          Select j.AffecteParent(a, k)).OrderBy(Function(j) j.EnvironnementApplicationJob).ToList()

' Chargement DataGridView
Me.DataGridView1.DataSource = MyJobs

Le load du DataGridView, environ 1200 lignes et 35 colonnes, prend 3-4".

Sur le formulaire, le load d'une vingtaine de Combobox prenait 4-5".
' Chargement ComboBoxENV
Dim MyENV = From a In MyJobs
            Order By a.Environnement Ascending
            Select a.Environnement
Me.ComboBoxEnv.DataSource = MyENV.Distinct.ToList

' Chargement ComboBoxApp
Dim MyAPP = From a In MyJobs
            Order By a.Application Ascending
            Select a.Application
Me.ComboBoxApp.DataSource = MyAPP.Distinct.ToList

J'ai supprimé toutes les comboboxes et créé un MenuStrip et plusieurs ToolStripMenuItems.
Pour le load
' Load ToolStripMenuEnv
Dim MyENV = (From a In MyJobs
             Order By a.Environnement Ascending
             Select a.Environnement).Distinct()

For Each item As String In MyENV
    Me.ToolStripMenuEnv.DropDownItems.Add(item)
Next

' Load ToolStripMenuApp
Dim MyAPP = (From a In MyJobs
             Order By a.Application Ascending
             Select a.Application).Distinct()

For Each item As String In MyAPP
    Me.ToolStripMenuApp.DropDownItems.Add(item)
Next

Mon problème, le load des ToolStrips, via For each ... Next s'effectue en 1'10".
Y aurait-il pas une autre méthode pour le load des ToolStrips ???

Merci de vos suggestions.

<Edit> ajout du langage dans la coloration
Afficher la suite 

Votre réponse

1 réponse

Messages postés
12930
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mars 2019
350
0
Merci
Bonjour,

il faudrait que tu fasses des piquages de temps entre chaque groupe d'instructions pour voir qui est long.

Ensuite peut-être faire un distinct avant le order by pourrait réduire le temps (mais à vérifier avec les piquages)
Whismeril
Messages postés
12930
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mars 2019
350 > Whismeril
Messages postés
12930
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mars 2019
-
ou ça
        Dim MyENV = (From a In MyJobs.Select(Function(j) j.Environnement).Distinct()
             Order By a Ascending
             Select New ToolStripMenuItem(a)).ToArray()

        mnuMenu.Items.AddRange(MyENV)
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
26 > Whismeril
Messages postés
12930
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mars 2019
-
Bonjour Whismeril,

J'ai testé tes propositions et la bonne est
        Dim MyJOB = (From a In MyJobs.Select(Function(j) j.Job).Distinct()
Order By a Ascending
Select New ToolStripMenuItem(a)).ToArray()

ToolStripMenuJob.DropDown.Items.AddRange(MyJOB)

Testé sur l'ensemble des ToolStrips, le chargement de celles-ci met 1".

Merci et bonne journée,
Whismeril
Messages postés
12930
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mars 2019
350 > cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Ça me parait logique, un order by c'est long, je ne sais pas comment il est codé, mais il faut que pour chaque item, évaluer ou le placer dans la collection de sortie.

Le fait de faire le distinct d'abord, réduit cette collection et donc le temps d'exécution.

Après sortir un tableau de toolstripmenuitem et l'ajouter avec AddRange, je ne savais pas si ça amènerait un gain de temps
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
26 > Whismeril
Messages postés
12930
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mars 2019
-
Ta première proposition
        Dim MyENV = (From a In MyJobs.Select(Function(j) j.Environnement).Distinct()
Order By a Ascending
Select a)

For Each item As String In MyENV
mettait exactement le même temps que mon exemple initial (40" pour 1230 lignes)
Whismeril
Messages postés
12930
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mars 2019
350 > cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
Ok comme quoi il faut essayer
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.