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

C# Discussion :

application très lente?


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Par défaut application très lente?
    Bonjour à tous , je travaille sur une application de gestion multi utilisateurs , et j’interagis avec ma base de données avec ADO.Net et voici ma méthode de remplissage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static DataTable Remplir(string sql)
            {
                DataTable dt;
                DataSet ds = new DataSet();
                OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
                Connecter();
                ds.Clear();
                da.Fill(ds);
                dt = ds.Tables[0];
                Deconnecter();
                return dt;
            }
    mais quand je clique le chargement du formulaire et très lente , y a-t-il une méthode plus rapide et merci d'avance?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    oui et non
    il faudrait déjà connaitre le temps d'exécution de la requete, et le temps de rapatriement des données
    si c'est l'exécution qui est longue il faut voir le schéma de la base et les indexes
    si c'est le rapatriement des données il faut voir si la requete ne remonte pas des colonnes ou lignes inutiles, après sinon tu peux déporter ca sur un autre thread pour que ca ne fige pas l'appli
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Par défaut
    A propos le temps d'exécution de la requête et même pas 1 seconde , le lentement viens au moment du chargement du formulaire voici vidéo qui explique ça : https://www.dropbox.com/s/48e7phle53...Video.mp4?dl=0 , et merci beaucoup

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    il faut bien identifier le code qui est le cause pour que nous puissions t'aider à l'optimiser je propose de démarrer en mode debug
    pour identifier les méthodes :

    si ton la cause est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static DataTable Remplir(string sql)
            {
                DataTable dt;
                DataSet ds = new DataSet();
                OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
                Connecter();
                ds.Clear();
                da.Fill(ds);
                dt = ds.Tables[0];
                Deconnecter();
                return dt;
            }
    par fois le le faite de faire select * n'est pas optimisé il faut sélectionner que les champs que tu as besoin pour ton affichage

    plus de details ça peux aider

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Par défaut
    effectivement la cause c'est la fonction est c'est au moment du chargement , et moi j'ai besoin de tous les champs de ma table c'est pour ça que je fais select * , et merci

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    On évite à TOUT prix de faire un select *

    Le select *, bien que pas beaucoup plus long est à bannir car si ta base change, l'ordre des colonnes change, etc...

    donc, on fait un select [NomColonne], ....

    Tu gagneras un poil de temps évidemment, mais ton blocage n'est surement pas là...

    Un test à faire, simple est de voir le temps pour exécuter la requete sur le SGBD.

    Et sinon, faire le chargement en tache de fond est une "solution" qui masque ce type de lenteur pour l'utilisateur.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    à tout prix non
    dans certains cas c'est utile, vu qu'on peut récupérer le nom des colonnes qui remontent, sur certains traitements automatisés ca ne pose pas de soucis
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    faut voir aussi les types des champs à sélectionner, il y'a des champs de grand taille ,exmple : varbinary?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Par défaut
    Pourquoi ne pas séparer ton affichage, du traitement des données ? Par exemple tu peux effectuer ta requête de manière asynchrone pour passer la main à l'UI.

  10. #10
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Citation Envoyé par pitipilot Voir le message
    Pourquoi ne pas séparer ton affichage, du traitement des données ? Par exemple tu peux effectuer ta requête de manière asynchrone pour passer la main à l'UI.
    Je pense qu il ne fait pas de traitement ?!! que l'affichage ,dans tous les cas il doit optimiser son application

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    s'il y a beaucoup de lignes (>10k on va dire) seul le multithreading pourra solutionner cette lenteur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    s'il y a beaucoup de lignes (>10k on va dire) seul le multithreading pourra solutionner cette lenteur
    oui bien sur ,mais i y'a une légère difference entre asynchrone et multithreading, peut être que asynchrone utilise multithread (crée un autre thread) mais ce n'est pas la même chose.

    Je pense que j'ai pas dit de Bêtises

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    je ne vois pas l'utilité de jouer sur les mots, l'asynchrone utilise forcément un autre thread
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Par défaut
    Voilà un de mes vieux codes permettant de faire une requête en asynchrone avec async/await


    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
     
           private async void BPGet_Click(object sender, RoutedEventArgs e)
            {
                if (this.CbBat.Items.Count == 0)
                {
                    String connect, requete, table;
     
                    connect = "Chaine de connexion";
                    requete = "Ma requete";
                    table = "[OF]";
     
                    Task<DataSet> reqBDD = Req_BDD(connect, requete, table);
                    DataSet ds = new DataSet();
                    ds = await reqBDD;
     
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        if (Convert.ToString(row[0]) != String.Empty) { this.CbBat.Items.Add(row[0]); }
     
                    }
                }
            }
    Puis le code de la fonction ReqBDD :

    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
     
     
            private async Task<DataSet> Req_BDD(String connect, String requete, String table)
            {
     
                SqlConnection connexion = new SqlConnection();
                connexion.ConnectionString = connect;
     
                SqlCommand selectCommand = new SqlCommand();
                selectCommand.Connection = connexion;
                selectCommand.CommandText = requete;
     
                SqlDataAdapter adapter = new SqlDataAdapter(selectCommand); 
                DataSet data = new DataSet(); 
     
                try
                {
                            await Task.Run(() => {
                                connexion.Open(); // Ouverture de la connexion
                                adapter.Fill(data, table); // Récupère les données
     
                             });
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
     
                finally
                {    
                     connexion.Close();
                }
                return data;
            }

  15. #15
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 67
    Par défaut
    Re-bonjour à tous merci de vos réponses
    à propos ma requête s'exécute rapidement sur SQL même si j'ai des milliers d'enregistrement , vue que je suis débutant je mélange l'affichage avec le traitement , je vois que le multithreading et la synchronisation et ce que je cherche et la seul solution , bon j'ai essayer avec le code de "pitipilot" mais il me souligne sur certaine choses voici une capture d'écran :
    Nom : Capture.PNG
Affichages : 374
Taille : 19,1 Ko

    à savoir : je travaille avec visual studio 2010 , c# .
    et merci beaucoup de votre aide

Discussions similaires

  1. application trés lente en php
    Par abdego dans le forum Langage
    Réponses: 10
    Dernier message: 16/05/2014, 11h35
  2. Application très lente au démarrage
    Par anissbenben dans le forum Bases de données
    Réponses: 8
    Dernier message: 05/11/2012, 19h22
  3. Application très lente sous solaris
    Par pchoucine dans le forum Débuter avec Java
    Réponses: 18
    Dernier message: 01/10/2009, 15h50
  4. Application vb6 très lente
    Par guandal dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 06/02/2008, 14h31
  5. application très lente
    Par hamham dans le forum Général Java
    Réponses: 13
    Dernier message: 17/01/2007, 14h41

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