IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Optimisation des temps de chargement


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut Optimisation des temps de chargement
    Je trouve les temps de chargement de mon application un peu longs.
    Dans certaine de mais bases j'ai 100 milles lignes.

    Au début de mon code je rempli mais DataTables avec mes bases entières. Et ensuite je fais des if dans des for pour trouver les infos dont j'ai besoin.

    Ne serait-il pas mieux de remplir mes DataTables dans mes fonctions et de faire des WHERE dans mes requetes SQL, comme cela il y aurait moins de boucles.

    Si vous trouvez d'autres choses à améliorer dites le moi.

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
     
     
    namespace Consultationbis
    {
        public partial class F_ConsultSearch : Form
        {
            SqlConnection m_cnADONetConnection = new SqlConnection();
            SqlDataAdapter m_daDataAdapter1;
            SqlDataAdapter m_daDataAdapter2;
            SqlDataAdapter m_daDataAdapter3;
            SqlDataAdapter m_daDataAdapter4;
            SqlDataAdapter m_daDataAdapter5;
            DataSetConsultSearch m_ConsultSearchData = new DataSetConsultSearch();
            bool ValidationRefInt = false;
            bool ValidationClt = false;
            bool ValidationFrs = false;
     
            public F_ConsultSearch()
            {
                InitializeComponent();
            }
     
            private void F_ConsultSearch_Load(object sender, EventArgs e)
            {
                new F_ConsultRef().Show();
                Application.OpenForms[0].Focus();
                m_cnADONetConnection.ConnectionString =
                @"Server=***;Database=***;User ID=***;Password=***;Trusted_Connection=False";
                m_cnADONetConnection.Open();
                m_daDataAdapter1 = new SqlDataAdapter("SELECT AKKNDI,AKARTK, AKARTN  FROM ARKF_ACTIF ORDER BY AKARTN;", m_cnADONetConnection);
                m_daDataAdapter2 = new SqlDataAdapter("SELECT KNKNDI, KNKNDK, KNKNMN FROM KNDF ORDER BY KNKNDK;", m_cnADONetConnection);
                m_daDataAdapter3 = new SqlDataAdapter("SELECT ITNBR, ITDSC FROM ITEMASA ORDER BY ITNBR;", m_cnADONetConnection);
                m_daDataAdapter4 = new SqlDataAdapter("SELECT LLCDPA,LLCDFO FROM LISTF00F_ACTIF ORDER BY LLCDFO;", m_cnADONetConnection);
                m_daDataAdapter5 = new SqlDataAdapter("SELECT VNDNR,VNAME FROM VENNAM ORDER BY VNDNR;", m_cnADONetConnection);
                m_daDataAdapter1.Fill(m_ConsultSearchData.ARKF_ACTIF);
                m_daDataAdapter2.Fill(m_ConsultSearchData.KNDF);
                m_daDataAdapter3.Fill(m_ConsultSearchData.ITEMASA);
                m_daDataAdapter4.Fill(m_ConsultSearchData.LISTF00F_ACTIF);
                m_daDataAdapter5.Fill(m_ConsultSearchData.VENNAM);
     
                //Init Les Liste
                Lst_Ref.Items.Clear();
                Lst_Clt.Items.Clear();
                Lst_Frs.Items.Clear();
     
            }
     
            public void RemplListRefAvecCodeClt(string CodeCltEnCours)
            {
                Lst_Ref.Items.Clear();
                int NbreDePiecesPourClientSelect; NbreDePiecesPourClientSelect = 0;
                int PositionRefEnCours; PositionRefEnCours = 0;
     
                for (int i = 0; i < m_ConsultSearchData.KNDF.Rows.Count; i++)
                {
                    if (m_ConsultSearchData.KNDF[i].KNKNDK.ToString() == CodeCltEnCours)
                    {
                        for (int j = 0; j < m_ConsultSearchData.ARKF_ACTIF.Rows.Count; j++)
                        {
                            if (m_ConsultSearchData.ARKF_ACTIF[j].AKKNDI.ToString() == m_ConsultSearchData.KNDF[i].KNKNDI.ToString())
                            {
                                for (int k = 0; k < m_ConsultSearchData.ITEMASA.Rows.Count; k++)
                                {
                                    if (m_ConsultSearchData.ITEMASA[k].ITNBR.ToString() == m_ConsultSearchData.ARKF_ACTIF[j].AKARTN.ToString())
                                    {
                                        NbreDePiecesPourClientSelect++;
                                        ListViewItem objListItem;
                                        objListItem = new ListViewItem(m_ConsultSearchData.ITEMASA[k].ITNBR.ToString());
                                        objListItem.ImageIndex = 0;
                                        objListItem.SubItems.Add(m_ConsultSearchData.ITEMASA[k].ITDSC.ToString());
                                        Lst_Ref.Items.Add(objListItem);
                                        if (m_ConsultSearchData.ITEMASA[k].ITNBR.ToString() == Txt_RefInt.Text)
                                        {
                                            PositionRefEnCours = NbreDePiecesPourClientSelect - 1;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (Lst_Ref.Items.Count > 0)
                {
                    Lst_Ref.Items[PositionRefEnCours].Selected = true;
                    Lst_Ref.Select();
                    Txt_RefInt.Text = Lst_Ref.SelectedItems[0].Text;
                }
     
            }
     
            public void RemplListRefAvecCodeFrs(string CodeFrsEnCours)
            {
                Lst_Ref.Items.Clear();
                int NbreDePiecesPourFrsSelect; NbreDePiecesPourFrsSelect = 0;
                int PositionRefEnCours; PositionRefEnCours = 0;
     
                for (int i = 0; i < m_ConsultSearchData.LISTF00F_ACTIF.Rows.Count; i++)
                {
                    if (m_ConsultSearchData.LISTF00F_ACTIF[i].LLCDFO.ToString() == CodeFrsEnCours)
                    {
                        for (int j = 0; j < m_ConsultSearchData.ARKF_ACTIF.Rows.Count; j++)
                        {
                            if (m_ConsultSearchData.ITEMASA[j].ITNBR.ToString() == m_ConsultSearchData.LISTF00F_ACTIF[i].LLCDPA.ToString())
                            {
                                NbreDePiecesPourFrsSelect++;
                                ListViewItem objListItem;
                                objListItem = new ListViewItem(m_ConsultSearchData.ITEMASA[j].ITNBR.ToString());
                                objListItem.ImageIndex = 0;
                                objListItem.SubItems.Add(m_ConsultSearchData.ITEMASA[j].ITDSC.ToString());
                                Lst_Ref.Items.Add(objListItem);
                                if (m_ConsultSearchData.ITEMASA[j].ITNBR.ToString() == Txt_RefInt.Text)
                                {
                                    PositionRefEnCours = NbreDePiecesPourFrsSelect - 1;
                                }
                            }
                        }
                    }
                }
                if (Lst_Ref.Items.Count > 0)
                {
                    Lst_Ref.Items[PositionRefEnCours].Selected = true;
                    Lst_Ref.Select();
                    Txt_RefInt.Text = Lst_Ref.SelectedItems[0].Text;
                }
                else
                {
                    Txt_RefInt.Text = null;
                }
                Txt_CodeClt.Text = null;
                Txt_RefClt.Text = null;
            }
     
            public void RemplListFrsAvecRef(string RefEnCours)
            {
                Lst_Frs.Items.Clear();
                int NbreDeFrsPourPieceSelect; NbreDeFrsPourPieceSelect = 0;
                int PositionFrsEnCours; PositionFrsEnCours = 0;
                for (int i = 0; i < m_ConsultSearchData.LISTF00F_ACTIF.Rows.Count; i++)
                {
                    if (m_ConsultSearchData.LISTF00F_ACTIF[i].LLCDPA.ToString() == Txt_RefInt.Text)
                    {
                        for (int j = 0; j < m_ConsultSearchData.VENNAM.Rows.Count; j++)
                        {
                            if (m_ConsultSearchData.VENNAM[j].VNDNR.ToString() == m_ConsultSearchData.LISTF00F_ACTIF[i].LLCDFO.ToString())
                            {
                                NbreDeFrsPourPieceSelect++;
                                ListViewItem objListItem;
                                objListItem = new ListViewItem(m_ConsultSearchData.LISTF00F_ACTIF[i]["LLCDFO"].ToString());
                                objListItem.ImageIndex = 0;
                                objListItem.SubItems.Add(m_ConsultSearchData.VENNAM[j].VNAME.ToString());
                                Lst_Frs.Items.Add(objListItem);
                                if (m_ConsultSearchData.LISTF00F_ACTIF[i].LLCDFO.ToString() == Txt_CodeFrs.Text)
                                {
                                    PositionFrsEnCours = NbreDeFrsPourPieceSelect - 1;
                                }
                            }
                        }
                    }
                }
                if (Lst_Frs.Items.Count > 0)
                {
                    Lst_Frs.Items[PositionFrsEnCours].Selected = true;
                    Lst_Frs.Select();
                    Txt_CodeFrs.Text = Lst_Frs.SelectedItems[0].Text;
                }
                else
                {
                    Txt_CodeFrs.Text = null;
                }
            }
     
            public void RemplListCltAvecRef(string RefEnCours)
            {
                Lst_Clt.Items.Clear();
                int NbreDeClientsPourPieceSelect; NbreDeClientsPourPieceSelect = 0;
                int PositionCltEnCours; PositionCltEnCours = 0;
                for (int i = 0; i < m_ConsultSearchData.ARKF_ACTIF.Rows.Count; i++)
                {
                    if (m_ConsultSearchData.ARKF_ACTIF[i].AKARTN.ToString() == RefEnCours)
                    {
                        for (int j = 0; j < m_ConsultSearchData.KNDF.Rows.Count; j++)
                        {
                            if (m_ConsultSearchData.KNDF[j].KNKNDI.ToString() == m_ConsultSearchData.ARKF_ACTIF[i].AKKNDI.ToString())
                            {
                                NbreDeClientsPourPieceSelect++;
                                ListViewItem objListItem;
                                objListItem = new ListViewItem(m_ConsultSearchData.KNDF[j].KNKNDK.ToString());
                                objListItem.ImageIndex = 0;
                                objListItem.SubItems.Add(m_ConsultSearchData.KNDF[j].KNKNMN.ToString());
                                Lst_Clt.Items.Add(objListItem);
                                if (m_ConsultSearchData.KNDF[j].KNKNDK.ToString() == Txt_CodeClt.Text)
                                {
                                    PositionCltEnCours = NbreDeClientsPourPieceSelect - 1;
                                }
                            }
                        }
                    }
                }
                if (Lst_Clt.Items.Count > 0)
                {
                    Lst_Clt.Items[PositionCltEnCours].Selected = true;
                    Lst_Clt.Select();
                    Txt_CodeClt.Text = Lst_Clt.SelectedItems[0].Text;
                    RemplRefCltAvecCodeClt(Txt_CodeClt.Text, RefEnCours);
                }
                else
                {
                    Txt_CodeClt.Text = null;
                    Txt_RefClt.Text = null;
                }
            }
     
            public void RemplRefCltAvecCodeClt(string CodeCltEnCours, string RefEnCours)
            {
     
                if (CodeCltEnCours == null)
                {
                    Txt_RefClt.Text = null;
                }
                for (int i = 0; i < m_ConsultSearchData.KNDF.Rows.Count; i++)
                {
                    if (m_ConsultSearchData.KNDF[i].KNKNDK.ToString() == CodeCltEnCours)
                    {
                        for (int j = 0; j < m_ConsultSearchData.ARKF_ACTIF.Rows.Count; j++)
                        {
                            if (m_ConsultSearchData.ARKF_ACTIF[j].AKKNDI.ToString() == m_ConsultSearchData.KNDF[i].KNKNDI.ToString() && m_ConsultSearchData.ARKF_ACTIF[j].AKARTN.ToString() == RefEnCours)
                            {
                                Txt_RefClt.Text = m_ConsultSearchData.ARKF_ACTIF[j].AKARTK.ToString();
                            }
                        }
                    }
                }
            }
     
            private void Txt_RefInt_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Return)
                {
                    int NbreDePieces; NbreDePieces = 0;
     
                    //--> Vide les liste
                    Lst_Ref.Items.Clear();
                    Lst_Clt.Items.Clear();
                    Lst_Frs.Items.Clear();
     
                    //On regarde si la pièce existe
                    for (int i = 0; i < m_ConsultSearchData.ITEMASA.Rows.Count; i++)
                    {
                        if (m_ConsultSearchData.ITEMASA[i].ITNBR.ToString() == Txt_RefInt.Text)
                        {
                            NbreDePieces++;
                        }
                        if( NbreDePieces != 0)
                        {
                           break;
                        }
                    }
     
                    //Si la ref est inconnue
                    if (NbreDePieces == 0)
                    {
                        //--> Indique que la ref est inconnue
                        ListViewItem objListItem;
                        objListItem = new ListViewItem(Txt_RefInt.Text);
                        objListItem.ImageIndex = 0;
                        objListItem.SubItems.Add("Référence inconnue");
                        Lst_Ref.Items.Add(objListItem);
                    }
                        //Si la ref est connue
                    else
                    {
                        RemplListCltAvecRef(Txt_RefInt.Text);
                        RemplListFrsAvecRef(Txt_RefInt.Text);
                        if (Lst_Clt.Items.Count > 0)
                        {
                            RemplListRefAvecCodeClt(Lst_Clt.SelectedItems[0].Text);
                        }
                        if (Lst_Frs.Items.Count > 0)
                        {
                            RemplListRefAvecCodeFrs(Lst_Frs.SelectedItems[0].Text);
                        }
                        Lst_Ref.Focus();
                    }
                }
                ValidationRefInt = true;
            }
     
            private void Txt_CodeClt_KeyPress(object sender, KeyPressEventArgs e)
            {
     
                if (e.KeyChar == (char)Keys.Return)
                {
                    int NbreDeClients; NbreDeClients = 0;
     
                    //--> Vide les liste
                    Lst_Ref.Items.Clear();
                    Lst_Clt.Items.Clear();
                    Lst_Frs.Items.Clear();
     
     
                    //On regarde si le client existe
                    for (int i = 0; i < m_ConsultSearchData.KNDF.Rows.Count; i++)
                    {
                        if (m_ConsultSearchData.KNDF[i].KNKNDK.ToString() == Txt_CodeClt.Text)
                        {
                            NbreDeClients++;
                            ListViewItem objListItem;
                            objListItem = new ListViewItem(Txt_CodeClt.Text);
                            objListItem.ImageIndex = 0;
                            objListItem.SubItems.Add(m_ConsultSearchData.KNDF[i].KNKNMN.ToString());
                            Lst_Clt.Items.Add(objListItem);
                            Lst_Clt.Items[0].Selected = true;
                            Lst_Clt.Select();
                        }
                        if (NbreDeClients != 0)
                        {
                            break;
                        }
                    }
                    //Si le client est inconnu
                    if (NbreDeClients == 0)
                    {
                        //--> Indique que le client est inconnu
                        ListViewItem objListItem;
                        objListItem = new ListViewItem(Txt_CodeClt.Text);
                        objListItem.ImageIndex = 0;
                        objListItem.SubItems.Add("Client inconnu");
                        Lst_Clt.Items.Add(objListItem);
                    }
                    //Si le client est connu
                    else
                    {
                    RemplListRefAvecCodeClt(Txt_CodeClt.Text);
                    RemplRefCltAvecCodeClt(Txt_CodeClt.Text, Txt_RefInt.Text);
                    }
                }
                ValidationClt = true;
            }
     
            private void Txt_CodeFrs_KeyPress(object sender, KeyPressEventArgs e)
            {
     
                if (e.KeyChar == (char)Keys.Return)
                {
                    int NbreDeFrs; NbreDeFrs = 0;
     
                    //--> Vide les liste
                    Lst_Ref.Items.Clear();
                    Lst_Clt.Items.Clear();
                    Lst_Frs.Items.Clear();
     
     
                    //On regarde si le Frs existe
                    for (int i = 0; i < m_ConsultSearchData.LISTF00F_ACTIF.Rows.Count; i++)
                    {
                        if (m_ConsultSearchData.LISTF00F_ACTIF[i].LLCDFO.ToString() == Txt_CodeFrs.Text)
                        {
                            for (int j = 0; j < m_ConsultSearchData.VENNAM.Rows.Count; j++)
                            {
                                if (m_ConsultSearchData.VENNAM[j].VNDNR.ToString() == m_ConsultSearchData.LISTF00F_ACTIF[i].LLCDFO.ToString())
                                {
                                    NbreDeFrs++;
                                    ListViewItem objListItem;
                                    objListItem = new ListViewItem(Txt_CodeFrs.Text);
                                    objListItem.ImageIndex = 0;
                                    objListItem.SubItems.Add(m_ConsultSearchData.VENNAM[j].VNAME.ToString());
                                    Lst_Frs.Items.Add(objListItem);
                                    Lst_Frs.Items[0].Selected = true;
                                    Lst_Frs.Select();
                                }
                                if (NbreDeFrs != 0)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    //Si le frs est inconnu
                    if (NbreDeFrs == 0)
                    {
                        //--> Indique que le frs est inconnu
                        ListViewItem objListItem;
                        objListItem = new ListViewItem(Txt_CodeFrs.Text);
                        objListItem.ImageIndex = 0;
                        objListItem.SubItems.Add("Frs inconnu");
                        Lst_Frs.Items.Add(objListItem);
                    }
                    //Si le frs est connu
                    else
                    {
                        RemplListRefAvecCodeFrs(Txt_CodeFrs.Text);
                        RemplRefCltAvecCodeClt(Txt_CodeClt.Text, Txt_RefInt.Text);
                    }
                }
                ValidationFrs = true;
            }
     
            private void Lst_Ref_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
            {
                if (Txt_RefInt.Text != e.Item.Text && ValidationClt == false && ValidationFrs == false )
                {
                    ValidationRefInt = true;
                    Txt_RefInt.Text = e.Item.Text;
                    RemplListCltAvecRef(Txt_RefInt.Text);
                    RemplListFrsAvecRef(Txt_RefInt.Text);
                    Lst_Ref.Focus();
                    ScrollIntoView(Lst_Ref.SelectedItems[0]);
                }
     
                ValidationClt = false;
                ValidationFrs = false;
            }
     
            private void Lst_Clt_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
            {
                if (Txt_CodeClt.Text != e.Item.Text && ValidationRefInt == false)
                {
                    Txt_CodeClt.Text = e.Item.Text;
                    RemplListRefAvecCodeClt(Txt_CodeClt.Text);
                    Lst_Clt.Focus();
                }
                ValidationRefInt = false;
            }
     
            private void Lst_Frs_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
            {
                if (Txt_CodeFrs.Text != e.Item.Text && ValidationFrs == false)
                {
                    Txt_CodeFrs.Text = e.Item.Text;
                    if (Lst_Frs.Items.Count == 0)
                    {
                        RemplListRefAvecCodeFrs(Txt_CodeFrs.Text);
                    }
                    Lst_Frs.Focus();
                }
                ValidationFrs = false;
            }
     
            private void F_ConsultSearch_FormClosing(object sender, FormClosingEventArgs e)
            {
                Lst_Ref.Items.Clear();
                Lst_Clt.Items.Clear();
                Lst_Frs.Items.Clear();
                m_cnADONetConnection.Close();
                m_cnADONetConnection.Dispose();
            }
     
        }
    }
    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pourquoi mettre des noms aussi inexpressif pour tes tables et colonnes ??

    (pas lu le reste du code, qui est pas très joli à vu de nez ...)

    sinon c'est de la logique pour savoir qui est le plus rapide entre
    - lire toute une table, la copier d'sql vers ton prog, la relire à nouveau pour y chercher quelque chose
    - demander à un moteur de base de données de trouver quelques lignes (sachant qu'il a peut etre des index), puis ne copier que ces quelques lignes d'sql vers ton prog

    ...


    si tu cherches 2 lignes dans 100k lignes, tu peux diminuer les temps de 99% environ si tu as les bons index ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Ok merci beaucoup.

    Pour les noms des tables et des champs je n'y peut rien. Ils sont définis par la boite dans laquelle je passe mon stage et ils ne peuvent pas les changer.

  4. #4
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    J'ai fais les changements, mais le temps de chargement me semble encore trop long.

    Y a t-il un moyen de remplir ma liste plus rapidement. Car en ce moment je fais un while et j'ajoute ligne par ligne.

    Pourtant je ne fais que recopier ma réponse sql qui est un tableau à 2 dimensions. Puis-je le faire d'un seul coup?

    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
     
     
    public void RemplListRefAvecCodeFrs(string CodeFrsEnCours, bool InEventFrs)
            {
                if (this.Fonction == false)
                {
                    this.InEventRefFrs = true;
                }
                SqlDataReader DataReader1 = null;
     
                Lst_Ref.Items.Clear();
     
                string sql1 = "SELECT DISTINCT ITNBR, ITDSC FROM LISTF00F_ACTIF INNER JOIN ITEMASA ON LISTF00F_ACTIF.LLCDPA = ITEMASA.ITNBR WHERE LLCDFO = '" + CodeFrsEnCours + "' ORDER BY ITNBR";
                SqlConnection ConsultConnection2 = new SqlConnection(strConnexion);
                SqlCommand cmd1 = new SqlCommand(sql1, ConsultConnection2);
                ConsultConnection2.Open();
                DataReader1 = cmd1.ExecuteReader();
     
                int NbreDePiecesPourFrsSelect = 0;
                int PositionRefEnCours = 0;
     
                if (DataReader1.HasRows)
                {
                    while (DataReader1.Read())
                    {
                        NbreDePiecesPourFrsSelect++;
                        ListViewItem objListItem;
                        objListItem = new ListViewItem(DataReader1["ITNBR"].ToString());
                        objListItem.ImageIndex = 0;
                        objListItem.SubItems.Add(DataReader1["ITDSC"].ToString());
                        Lst_Ref.Items.Add(objListItem);
    (...)
    Merci d'avance

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Points : 106
    Points
    106
    Par défaut
    Si l'utilisation du ListView n'est pas obligatoire, je pense que tu devrais utiliser un control DataGridView et définir sa proprieté DataSource avec ton DataTable. Cela t'évitera la chargement manuel et c'est beaucoup plus rapide

  6. #6
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Ok merci, je vais me renseigner sur le DataGrid.

  7. #7
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Je pense que le DataGrid est effectivement la bonne solution.
    Je souhaite le remplir avec un DataReader.

    Je voudrai savoir comment ça se passe. Dois-je créer les colonnes de mon DataGrid avant ou il copie les colonnes du DataReader?

    Voici mon code ( ça compile mais rien dans mon DatatGrid) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    string sql3 = "SELECT ITNBR, ITDSC FROM ITEMASA WHERE ITNBR = '" + DataReader1AKARTN + "' ORDER BY ITNBR";
    SqlConnection ConsultConnection = new SqlConnection(strConnexion);
    SqlCommand cmd3 = new SqlCommand(sql3, ConsultConnection);
    ConsultConnection.Open();
    DataReader3 = cmd3.ExecuteReader();
     
    Grid_Ref.DataSource = DataReader3;
    DataReader3.Close();
    ConsultConnection.Close();
    cmd3.Dispose();
    ConsultConnection.Dispose();
    Je suis sûre que mon DataReader se rempli vu que j'ai réussi à remplir une ListView avec.

  8. #8
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Pourquoi un Close et ensuite un Dispose sur le même objet ?

    Pourquoi ne pas charger les données au fur à mesure qu'on en a besoin au lieu de tout charger ?

    Tu dois être conscient également que le fait de charger une trop grande quantité de données à la fois peut engendrer des problèmes de mémoire et déclencher une exception de type OutOfMemoryException.

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu ne peux pas donner un datareader à un datasource
    soit tu remplies un datatable que tu mets en datasource, soit tu fais tout à la main

    m'enfin suffit de chercher un peu au lieu de tenter d'écrire des conneries pour voir si elles marchent ...



    Citation Envoyé par harz62 Voir le message
    Pourquoi un Close et ensuite un Dispose sur le même objet ?
    ce sont 2 choses différentes (certes dispose appelle close dans ces 2 cas)

    Citation Envoyé par harz62 Voir le message
    Pourquoi ne pas charger les données au fur à mesure qu'on en a besoin au lieu de tout charger ?
    on est pas aussi limité que sur une techno web à faire de l'affichage 20 par 20 ...
    sur un site on est souvent obligé de demander d'abord les filtres à appliquer puis executer la requete et l'aller retour
    sur un client lourd en réseau local, ca ne dérange pas du tout de rapatrier des centaines de milliers de lignes puis de faire les filtres et/ou tris en temps réel sur les données en ram
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    (certes dispose appelle close dans ces 2 cas)
    Justement d'où l'intérêt de la question...

    Citation Envoyé par Pol63 Voir le message
    on est pas aussi limité que sur une techno web à faire de l'affichage 20 par 20 ...
    sur un site on est souvent obligé de demander d'abord les filtres à appliquer puis executer la requete et l'aller retour
    sur un client lourd en réseau local, ca ne dérange pas du tout de rapatrier des centaines de milliers de lignes puis de faire les filtres et/ou tris en temps réel sur les données en ram
    Peut être pas mais exploiter 300 Mo de RAM rien que un prog dépendant d'une BDD, faut aussi prendre en compte les progs à coté. La RAM c'est aussi une ressource précieuse !

  11. #11
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Pardon Madame la chèvre, je ne voulais pas vous énerver.

    En fait je ne vois pas vraiment la différence entre un DataReader et un DataTable. Ceux sont tous les deux des tableaux qui contiennent la réponse à une requete sauf que la DataTable est en mode déconnecté?

    En ce qui concerne le nombre de choses que je charge, je n'ai pas le choix. En faite je prend le minimum.

    Merci pour vos réponses.

  12. #12
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par Chacha35 Voir le message
    Pardon Madame la chèvre, je ne voulais pas vous énerver.
    Euh... ?

    Citation Envoyé par Chacha35 Voir le message
    En fait je ne vois pas vraiment la différence entre un DataReader et un DataTable. Ceux sont tous les deux des tableaux qui contiennent la réponse à une requete sauf que la DataTable est en mode déconnecté?
    Un dataReader récupère la donnée au moment ou elle est envoyée par le SGBDR. On ne peut connaitre ni la précédente ligne ni la suivante (mon ancien prof appelait ça une "lance à incendie").
    Le DataTable lui va stocker le résultat de la requête dans une ou plusieurs tables. Dans le 1er cas si on enregistre pas les données, elle seront perdus après lectures (d'où le mode connecté) alors qu'un dataTable lui contient les données mais dans la RAM, on peut les exploiter sans avoir besoin du SGBDR donc mode déconnecté.

  13. #13
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Bonne explication merci.

    Je m'en suis sortie avec mon DataGrid.

    A la prochaine

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par harz62 Voir le message
    Peut être pas mais exploiter 300 Mo de RAM rien que un prog dépendant d'une BDD, faut aussi prendre en compte les progs à coté. La RAM c'est aussi une ressource précieuse !

    prenons une ligne contenant 5 champs bigint et 5 champs nvarchar de 20 caractères
    une ligne pèse donc 80 octets
    100 000 lignes font donc un peu moins de 8Mo (pas 300)

    de plus 300 en ram pour une appli je trouve pas ca choquant vu le prix de la ram ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    prenons une ligne contenant 5 champs bigint et 5 champs nvarchar de 20 caractères
    une ligne pèse donc 80 octets
    Les chaines c'est 5*20 mini > 80 octets. En plus une chaine peut être codée sur 2 octets suivant le codage utilisé.

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    oui petit oubli de multiplication par 5 (j'ai précisé nvarchar donc oui 2octets/char)
    bref on arrive à 240octets par ligne
    ce qui fait un peu plus de 20Mo pour 100k lignes, ca casse pas des briques non plus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/11/2012, 12h27
  2. Réponses: 6
    Dernier message: 22/09/2010, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo