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

ASP.NET Discussion :

Optimisation d'un bout de code car temps de réponse trop long


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Par défaut Optimisation d'un bout de code car temps de réponse trop long
    Bonjour,

    J'ai une application qui génére un fichier Excel avec vraiment beaucoup de données dedans. Le problème c'est qu'il est super long à générer (plusieurs minutes), j'ai donc isolé la méthode et débogguer pour voir où cela ralentissais précisément et le bout de code qui ralentit c'est lui :

    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
     
     
    for (int i = 0; i < produitList.Count; i++)
            {
                int total = 0;
                for (int j = 0; j < filialeList.Count; j++)
                {
                    ParameterCollection p1 = new ParameterCollection();
                    p1.Add("Dossier", "165");
                    p1.Add("Produit", produitList[i]);
                    p1.Add("Filiale", filialeList[j]);
     
                    dt = ***WebTools.SelectAppQuery("SELECT quantite FROM ProduitCommandeDoc WHERE (pk_idDossier = @Dossier) AND (pk_idProduit = @Produit) AND (pk_idSoc = @Filiale)", p1);
                    if (dt.Rows.Count > 0)
                    {
                        try
                        {
                            int qte = int.Parse(dt.Rows[0]["quantite"].ToString());
                            total += qte;
                        }
                        catch (Exception) { }
                        oExcelSheet.Cells[startRow + j + 1, i + 3] = dt.Rows[0]["quantite"].ToString();
                    }
                    else
                        oExcelSheet.Cells[startRow + j + 1, i + 3] = "0";
                }
                oExcelSheet.Cells[startRow + filialeList.Count + 1, i + 3] = total.ToString();
            }
    Comment puis-je optimiser ce bout de code car jettant un oeil je vois mal comment il peut être codé autrement.

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Salut,

    au lieu d'effectuer "i*j" fois son select essaie de l'excuter une seule fois, ou "i" fois et de boucler sur les lignes renvoyées

  3. #3
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut

    Comment se présente ton fichier? Si il est tabulaire avec un seul onglet utilise un fichier XML.

    1. Utilise une procédure stockée
    2. Qu'est-ce que "WebTools"?
    3. Récupère toutes tes données avant de créer ton fichier Excel

    Sinon, tu peux demander à ta boite d'acheter un vrai logiciel de "DataMining" (Business Intelligence).

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Par défaut
    C'est un fichier excel classique (1 seul onglet est utilisé) qui se présente de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
              Produit1   Produit2  Produit3 ...
    filiale1
    filiale2
    filiale3
    ...
    WebTool c'est une libraire développé par ma boite, je l'utilise pour une question partique ça m'évite d'ouvrir une connexion à la BDD, la fermer etc...

    Je ne vois pas ce que tu veux dire par utiliser un fichier xml puisque le fichier Excel que je génère, je le propose en téléchargement à l'utilisateur et ce format Excel est imposé.

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par manu f Voir le message
    Je ne vois pas ce que tu veux dire par utiliser un fichier xml puisque le fichier Excel que je génère, je le propose en téléchargement à l'utilisateur et ce format Excel est imposé.
    Excel ouvre très facilement les fichiers xml "tabulaires".

    Sinon, ton code fait plusieurs choses en même temps:
    • Récupérer les données,
    • réaliser des calculs à la volée,
    • Créer un fichier excel et le remplir au fur et à mesure
    C'est trop si tu as beaucoup de données.
    Faits les étapes les unes après les autres:
    • Récupères les données déjà calculées par la base ou bien récupères-en plus et fait le tri avec le code
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SELECT * FROM ProduitCommandeDoc Where pk_idDossier  in (123, 456, 789)
    • Créés la source de données compilée (au format XML)
    • Génère ton fichier Excel à partir de cette source
    Ainsi, tu sauvegardes les données compilées. Si quelqu'un réclame aussi le fichier Excel tu n'as que la moitié du boulot à faire. Tu peux même juste envoyer le XML.

    En créant un fichier XML tu évites de créer un fichier Excel et de remplir les cellules une par une. L'avantage devrait être indéniable sur la consommation des ressources. D'autant que Excel dans ton cas Excel ne te sert que pour ouvrir une source de données. Excel n'a pas la réputation d'être très économe en ressources.

    S'agissant de donnée tabulaires tu as plein de solutions:
    • Faire faire tout le boulot par un procédure stockée "complexe" (cela évitera les aller et retours entre la base et IIS)
    • Faire plusieurs procédures stockées qui remplieront une datatable
    J'ai souvent eu des gros fichiers de données à réaliser. Plusieurs procédures stockées + un dataset + des datatables liées m'ont permis de générer des fichiers de plusieurs dizaines de méga en quelques dizaines de secondes.

    As-tu lu ce tuto: http://philippe.developpez.com/artic...erexcelaspnet/

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Fais les étapes les unes après les autres
    +1
    Crées la source de données compilée (au format XML)
    Plus facile et plus performant : L'utilisation de fichier .csv (Ascii délimité).

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 349
    Par défaut
    Salut,

    c'est surement à cause de ton " webtool " tu dis ça t'évite d'ouvrir et fermer la connexion. De là je suppose qu'il ouvre et ferme la connexion automatique dès qu'il en a besoin et la ferme aussitôt. En effet tant que i inferieur à la list il va ouvrir et fermer la connexion pour chaque truc si j'ai bien compris !! Et ouvrir une connexion ça prend du temps...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Temps de réponse trop long
    Par LALACOM dans le forum Oracle
    Réponses: 11
    Dernier message: 03/10/2011, 17h37
  2. optimisation d'un bout de code
    Par ol9245 dans le forum MATLAB
    Réponses: 8
    Dernier message: 15/12/2010, 18h54
  3. temps de réponse trop long
    Par hammag dans le forum SQL
    Réponses: 7
    Dernier message: 11/05/2010, 13h00
  4. Optimisation d'un bout de code
    Par Lost in dans le forum MATLAB
    Réponses: 3
    Dernier message: 29/04/2008, 22h58
  5. temp de réponse trop long
    Par maxidoove dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/10/2005, 18h24

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