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 :

[c#] Création de Threads


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club Avatar de OtI$
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 64
    Points : 32
    Points
    32
    Par défaut [c#] Création de Threads
    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.
    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];
    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
    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();
     
            }
        }
    MErci d'avoir pris le temps de lire ce long post et pour toutes les réponses

    Thx

    Oti$
    --
    Carpe Diem

  2. #2
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Regarde les articles sur les threads mais je pense que le plus gros de ton problème n'est pas la. Je pense que la majorité de ton temps d'exécution vient du serveur de DB. l'optimisation SQL est probablement la première piste pour améliorer les performances.

Discussions similaires

  1. création de thread en C
    Par freetof dans le forum POSIX
    Réponses: 6
    Dernier message: 28/03/2007, 16h39
  2. Création de "thread" (?)
    Par Dom_the_quaker dans le forum Delphi
    Réponses: 1
    Dernier message: 03/01/2007, 16h49
  3. erreur à la création de thread
    Par thony76 dans le forum Visual C++
    Réponses: 5
    Dernier message: 28/07/2006, 11h26
  4. Modélisation de création de thread
    Par GETah dans le forum UML
    Réponses: 1
    Dernier message: 22/07/2006, 10h10
  5. Problème de création de thread
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 21h58

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