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 :

Pb d'optimisation (durée d'exe trop longue)


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Par défaut Pb d'optimisation (durée d'exe trop longue)
    Bonjour,

    Je débute en C#, je viens de réaliser un programme qui permet de saisir un nombre dans une phrase dans un fichier texte, d'effectuer un calcul sur ce nombre puis je réécrit tout dans un nouveau fichier texte.

    Je met tout le texte de mon fichier dans une chaine de caractère puis je fais un "split" de cette chaine. J'ai alors un tableau, je fais mes calculs puis au moment de rentrer mon tableau (avec les nouvelles valeurs) dans une nouvelle chaine, l'action dure très longtemps.
    Voici le code qui prend du temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Boucle pour reformer la chaine
                        for (int k = 2; k < cDefine.strgTablString.Length; k++)
                        {
                            // Définition de la nouvelle chaine qui contient tout le fichier copier et modifier
                            cDefine.strgNewCHAINE = cDefine.strgNewCHAINE + cDefine.strgTablString[k];
                            cDefine.strgTablString[k] = null;
                        }
    La longueur de mon tableau ~122000 éléments
    Est-ce que quelqu'un aurait une solution d'optimisation ?

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Utilise un StringBuilder pour créer ta chaine de caractère ou écris directement les données dans le fichier au lieu de créer la chaine en mémoire avant.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Utilise un StringBuilder pour créer ta chaine de caractère ou écris directement les données dans le fichier au lieu de créer la chaine en mémoire avant.
    +1
    A chaque fois que tu fais une concaténation, ça crée une nouvelle instance de String (les chaînes n'étant pas modifiables). Si tu le fais 122000 fois, forcément ça prend un peu de temps... Le StringBuilder sert justement à remédier à ce problème

  4. #4
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    Ce que je comprend pas, c'est pourquoi .Net change pas plutot sa facon de voir les strings plutot de creer un patch ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Tober Voir le message
    Ce que je comprend pas, c'est pourquoi .Net change pas plutot sa facon de voir les strings plutot de creer un patch ?
    Quel patch ? Je me suis peut-être mal exprimé en disant que StringBuilder servait à "remédier à ce problème"... StringBuilder n'est pas un "patch" pour pallier une mauvaise conception, ça a été volontairement conçu comme ça, probablement pour de bonne raisons...
    Après, si les développeurs n'utilisent pas correctement les classes à leur disposition, c'est un autre problème...

  6. #6
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    probablement pour de bonne raisons
    vi, le but, c'est que les strings soient immutables, comme en Java...ca permets quelques optimisations du compilateur, si je me rappelle bien


    C'est threadsafe, pas besoin de padding, trucs comme ca

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    une discussion intéressante sur ce sujet (en anglais)
    http://channel9.msdn.com/forums/Tech...mmutable-in-C/

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Par défaut
    Merci pour toutes vos réponses, en effet mon programme est maintenant nettement plus rapide.


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/02/2008, 11h16
  2. [Optimisation] Trop longue exécution
    Par Friedrick dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/02/2008, 14h58
  3. [Formule] Optimisation (formule trop longue)
    Par Alqualonde dans le forum Excel
    Réponses: 6
    Dernier message: 21/05/2007, 17h08
  4. [ASE] Duree de creation d'index trop longue
    Par greg75 dans le forum Sybase
    Réponses: 5
    Dernier message: 14/02/2007, 09h23
  5. Requette Trop longue. Comment optimiser ?[Traitement]
    Par Tankian dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/06/2006, 20h37

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