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

cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 23 juil. 2015 à 21:06 - Dernière réponse : Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 24 juil. 2015 à 07:47
0
Utile
6
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 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention > Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 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)
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 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,
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 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
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 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)
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 24 juil. 2015 à 12:57
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.