Bonjour,

je sollicite vos conseils afin d'accélérer le chargement de ma datagrid tout en gardant la facilté de binding sur ma datagrid.

Actuellement, pour charger 10 000 enregistrements dans ma datagrid, cela me prend environ 8 secondes

Voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
<DataGrid x:Name="dgdEnregistrement" Margin="8,150,8,8" VerticalAlignment="Top" Style="{DynamicResource MyDataGridStyle}" 
                  ColumnHeaderStyle="{DynamicResource MyDataGridColumnHeaderStyle}" RowStyle="{DynamicResource MyDataGridRowStyle}" 
                  CellStyle="{DynamicResource MyDataGridCellStyle}">
 
			<DataGrid.Columns>
                <DataGridTextColumn Header="Code Id" Binding="{Binding id_util}"/>
                <DataGridTextColumn Header="Nom" Binding="{Binding nom_util}">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="TextBlock">
                            <Setter Property="TextWrapping" Value="Wrap" />
                            <Setter Property="MaxWidth" Value="150" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
				<DataGridTextColumn Header="Prénom" Binding="{Binding prn_util}">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="TextBlock">
                            <Setter Property="TextWrapping" Value="Wrap" />
                            <Setter Property="MaxWidth" Value="150" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
                <DataGridTextColumn Header="Email" Binding="{Binding mail_util}">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="TextBlock">
                            <Setter Property="TextWrapping" Value="Wrap" />
                            <Setter Property="MaxWidth" Value="150" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
				<DataGridTextColumn Header="Identifiant" Binding="{Binding nom_conn_util}">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="TextBlock">
                            <Setter Property="TextWrapping" Value="Wrap" />
                            <Setter Property="MaxWidth" Value="150" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
				<DataGridTextColumn Header="Groupe" Binding="{Binding groupe.lib_grp}">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="TextBlock">
                            <Setter Property="TextWrapping" Value="Wrap" />
                            <Setter Property="MaxWidth" Value="150" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>
				<DataGridTextColumn Header="Configuration" Binding="{Binding groupe.acces_param}"/>
				<DataGridTextColumn Header="Mise à jour" Binding="{Binding groupe.acces_maj}"/>
                <DataGridTextColumn Header="Manuel" Binding="{Binding groupe.acces_manuel}"/>
                <DataGridTextColumn Header="Prodotec" Binding="{Binding groupe.acces_gestProd}"/>
                <DataGridTextColumn Header="Impression" Binding="{Binding groupe.acces_gestImp}"/>
			</DataGrid.Columns>
 
		</DataGrid>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
private void tbxRecherche_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            //Touche ENTER
            if (e == null || e.Key == Key.Enter)
            {
                if (a == null)
                {
                    a = new Thread(new ParameterizedThreadStart(LoadData));
                    a.Start(tbxRecherche.Text);
 
                }
            }
        }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
 public void LoadData(Object param)
        {
            Application app = System.Windows.Application.Current;
            if (app != null)
                app.Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)delegate
                {
                    x = new MyMessageBoxWait("Mise à jour des enregistrements");
                    x.ShowDialog();
                });
 
 
            listUtilisateur = daoUtilisateur.FindAll(param.ToString());
 
 
 
            if (app != null)
                app.Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)delegate
                {
                    if (listUtilisateur != null)
                    {
                        if (listUtilisateur != null && listUtilisateur.Count > 1)
                            lblEnregistrement.Content = listUtilisateur.Count + " Enregistrements";
                        else
                            lblEnregistrement.Content = listUtilisateur.Count + " Enregistrement";
                    }
                    else
                        lblEnregistrement.Content = "0 Enregistrement";
 
                    dgdEnregistrement.ItemsSource = listUtilisateur;
                    dgdEnregistrement.SelectedValue = listUtilisateur;
                    x.Visibility = Visibility.Hidden;
                    x.Close();
                });
            a = null;
 
        }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
 public ObservableCollection<MdlUtilisateur> FindAll(String name = "")
        {
            //Requete
            string query = "SELECT id_util, nom_util, prn_util, mail_util, nom_conn_util, mdp_conn_util, id_grp "
                + "FROM ls_util WHERE nom_util LIKE CONCAT('%', @param1, '%') AND vis_util = 1 ORDER BY nom_util";
 
            MySqlCommand cmd = null;
            MySqlDataAdapter ad = null;
            DataTable dt = null;
            DaoGroupe daoGroupe = null;
            ObservableCollection<MdlUtilisateur> listUtilisateur;
            try
            {
                //Preparation de la requete
                cmd = new MySqlCommand(query, this.connection);
                cmd.Parameters.AddWithValue("@param1", name);
                ad = new MySqlDataAdapter();
                ad.SelectCommand = cmd;
                dt = new DataTable();
                ad.Fill(dt);
 
                //Resultat
                if (dt.Rows.Count != 0)
                {   
                    daoGroupe = FactoryDao.getDaoGroupe();
                    listUtilisateur = new ObservableCollection<MdlUtilisateur>();
                    foreach (DataRow dr in dt.Rows)
                    {
                        listUtilisateur.Add(new MdlUtilisateur(Convert.ToInt64(dr[0]), dr[1].ToString(), dr[2].ToString(),
                            dr[3].ToString(), dr[4].ToString(), dr[5].ToString(), daoGroupe.findById(Convert.ToInt64(dr[6]))));
                    }
 
                    return listUtilisateur;
                }
                else
                    return null;
            }
            catch (Exception ex)
            {
                UtilsUi.ShowMessageError(ex);
                return null;
            }
            finally
            {
                //Liberation des ressources
                cmd.Dispose();
                ad.Dispose();
                dt.Dispose();
                daoGroupe = null;
                listUtilisateur = null;
            }
        }
Ce qui me prends du temps, ce n'est pas l'éxécution de la requête en elle même mais la génération du modele métier dans la méthode FindAll

Est ce la bonne méthode ?
Comment puis je accélérer tout ça ?

Merci