Salut la communauté!
J'aimerais réaliser la chose suivante:
Je dispose de plusieures requetes SQL, quasiment équivalentes, tirées d'une plus grosse requete SQL.
Le problème:
Lorsque j'execute ma "grosse requete", le prog rame pendant 2 bonnes minutes lorsque je récupère les résultats (592 rows et +ou- 30 colonnes) pour les mettre dans un dataset.
Mon début de solution:
J'ai donc découpé ma grosse requete en plusieures sous requetes qui font le même boulot, et j'aimerais donc créer n threads (1 thread/requete) afin de pseudo-parraléliser mon prog.
Au final, je voudrais donc récupérer n dataset qui regroupent mes données.
Ce que j'espère:
Au final, mon but est d'afficher le contenu de ma table dans un DataGridView, et que les opérations soient rapides (-30 sec).
Si quelqu'un a une meilleure solution, bien entendu je suis preneur, mais j'aimerais aussi comprendre comment créer ces threads (j'avoue que c'est la ue le bas blesse).
Je vous joints donc l'extrait de mon prog et ma classe de thread.
Et ma classe de thread:
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 string[] param = new string[10]; param[0] = "Base"; param[1] = "Peak"; param[2] = "dF"; param[3] = "f"; param[4] = "TTP"; param[5] = "RT"; param[6] = "dTPlus"; param[7] = "dTMoins"; foreach (string s in param) { string strSQL = "select" + "MyLine->LineHeader->Instruction->ID As InstrNumber ," + "MyLine->LineHeader->Instruction->Title ," + "MyLine->LineHeader->Instruction->Keep ," + "MyLine->LineHeader->Period->Range->Name As Range ," + "MyLine->LineHeader->Period->Range->ID AS \"Range#\" ," + "MyLine->LineHeader->Period->PeriodNumber As \"Period#\" ," + "MyLine->LineHeader->Instruction->Criteria ," + "MyLine->LineHeader->Instruction->StartAt ," + "MyLine->LineHeader->Instruction->StopAt ," + "MyLine->LineHeader->Instruction->NbPointInAverage As \"Average\"" + ", Param->Name, Val from Datanalyst.ParamValue" + "where Param->Name = '" + s + "'"; //CREATION DES THREADS } Th.WaitForStop(); DGV_Req.DataSource = ds.Tables[0];
MErci d'avoir pris le temps de lire ce long post et pour toutes les réponses
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 public class CacheThread { private Thread T1; private void ThrFunc1() { try { CacheConnection CacheConnect = new CacheConnection(); CacheConnect.ConnectionString = "Server = localhost;" + "Port = 1972;" + "Namespace = ST1STUDYTEST; " + "Password = userscontrol; " + "User ID = admin;"; CacheConnect.Open(); Form1.ds = new DataSet(); CacheCommand Command = new CacheCommand(strSQL, CacheConnect); CacheDataAdapter adapter = new CacheDataAdapter(Command); string t1 = DateTime.Now.ToString(); adapter.Fill(Form1.ds); string t2 = DateTime.Now.ToString(); MessageBox.Show(t1 + "\n" + t2); CacheConnect.Close(); } catch (Exception eLoad) { MessageBox.Show("An error has occurred: " + eLoad.Message); } } public void WaitForStop() { T1.Join(); } public CacheThread () { // ThrFunc est la fonction exécutée par le thread. T1 = new Thread(new ThreadStart(ThrFunc1)); // Il est parfois pratique de nommer les threads surtout si on en créé plusieurs. T1.Name = "Thread1"; // Démarrage du thread. T1.Start(); } }
Thx
Oti$
Partager