Bonjour,
J’ai quelques soucis de (grosse) lenteur avec une application que j’ai faite pour dédoublonner une base de données Access.
(Je dois comparer que l’Id client est différent mais avec le même CP, le même code Insee, la même enseigne, la position X et la même position Y).
Entant débutant je ne connais rien à l’objet, j’ai codé un programme qui récupère les données de mon select dans un Grid View que je n’affiche pas.
Je parcours tous le Grid View en comparant les champs si c’est un doublon je mets l’id client dans un tableau
puis j’envoie se tableau d’id client pour vérifier que celui-ci ne possède pas de campagne avant de le supprimer.
Si l’id client ne possède pas de campagne je le mets dans un nouveau tableau pour effectuer la suppression de celui-ci plus tard.
(Cette opération prend environ 8h)
Puis je relance La même opération mais en commençant par la fin du Grid View pour vérifier qu’il ne reste pas de doublon sans campagne. (Cette opération prend environ 8h).
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
 
// rempli le DataSet et le GridView
this.GridView_F5P.DataSource = this.Ds_carto.France5_p_copie;
this.Ds_carto.Clear();
this.FR_copie_carto.Fill(this.Ds_carto.France5_p_copie);
 
for (i = 0; i < GridView_F5P.Rows.Count; i++)
{
// Si l'Id de la premiere n'est pas Tag comme traité (' different de 1')
if (Convert.ToInt32(GridView_F5P.Rows[i].Tag) != 1)
      {
          for (j = 0; j < GridView_F5P.Rows.Count; j++)
          {
            // on compare que l'ID est different mais avec les memes : 
            // position X, position Y, C.P, code Insee, enseigne
if ((Convert.ToInt32(GridView_F5P.Rows[i].Cells[0].Value) != Convert.ToInt32(GridView_F5P.Rows[j].Cells[0].Value)) && 
(Convert.ToInt32(GridView_F5P.Rows[i].Cells[1].Value) == Convert.ToInt32(GridView_F5P.Rows[j].Cells[1].Value)) && 
(GridView_F5P.Rows[i].Cells[2].Value.ToString() == GridView_F5P.Rows[j].Cells[2].Value.ToString()) && (GridView_F5P.Rows[i].Cells[3].Value.ToString() == GridView_F5P.Rows[j].Cells[3].Value.ToString()) && 
(Convert.ToDouble(GridView_F5P.Rows[i].Cells[4].Value) == Convert.ToDouble(GridView_F5P.Rows[j].Cells[4].Value)) &&
(Convert.ToDouble(GridView_F5P.Rows[i].Cells[5].Value) == Convert.ToDouble(GridView_F5P.Rows[j].Cells[5].Value)))
            {
              // C'est un doublon
              nb++;
              // enregistre son Id
tab[ind] = Convert.ToInt32(GridView_F5P.Rows[j].Cells[0].Value);
               ind++;
               z = i; i = j;
               // On Tag cette Id comme traité ('1') dans la premiere table pour ne pas la retraiter
               GridView_F5P.Rows[i].Tag = 1;
               i = z;
              }
            }
        }
   }
 
// on envoie tous les Id present dans le tableau des doublon ('tab')
// Si l'Id ne possede pas de campagne ('count inferieur ou égal 0')
// on l'enregistre dans le tableau des doublons sans campagne('tab_camp')
 
int ind2 = 0;       // indice du tableau des doublons sans campagne
int i = 0;          // indice du tableau des doublons
int nb = 0;         // permet de connaitre le nombre de doublon sans campagne
int count = 0;
// parcourt tous le tableau tant que l’ID est pas à zéro
while (Convert.ToInt32(tab[i]) != 0)
{
   count = (int)Det_Camp_carto.FillBy_recherche(Convert.ToInt32(tab[i]));
 
   if (count <= 0)
   {
       tab_camp[ind2] = Convert.ToInt32(tab[i]);
       ind2++;
       nb++;
   }
   i++;
 }
 lbl_camp.Text = "" + nb + " sans campagne";
On me demande de faire en sorte que cela prenne moins de temps mais je ne sais pas comment faire.
Est-ce que je dois le faire en objet ? Si oui pouvez-vous m’aiguiller ?