Contrôle MenuStrip - Load des ToolStripMenuItems

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - Modifié par Whismeril le 24/07/2015 à 07:45
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 24 juil. 2015 à 12:57
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

1 réponse

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 juil. 2015 à 07:47
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)
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 juil. 2015 à 08:11
un truc comme ça
        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
            mnuMenu.Items.Add(item)
        Next
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
24 juil. 2015 à 08:20
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)
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27 > Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
24 juil. 2015 à 10:14
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,
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018
24 juil. 2015 à 12:18
Ç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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27 > Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
24 juil. 2015 à 12:25
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)
0
Rejoignez-nous