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 :
On me demande de faire en sorte que cela prenne moins de temps mais je ne sais pas comment faire.
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 lID 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";
Est-ce que je dois le faire en objet ? Si oui pouvez-vous m’aiguiller ?
Partager