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 :

Perf et methodes d'extension


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut Perf et methodes d'extension
    je voulais savoir quel code est le plus performant en terme de temps. Et bien evideamment, m'expliquer pourquoi ...

    merci d'avance

    Version A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (var item in _Items.Where(Item => Item.BoolProp == true))
    {
        item.BoolProp = false;
    }
    Version B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (var item in _Items)
    {
        item.BoolProp = false;
    }

  2. #2
    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
    salut

    aucune idée

    Par contre, tu mets un Stopwatch avant et après pour mesurer et tu compares les deux résultats

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    A moins que tes collections ne contiennent des milliers / des millions d'objet, ou que tu fasse un traitement un peu lourd dans le set de ta propriété (du style un NotifyPropertyChanged), l'éventuelle petzouille de différence de perf ne vaut pas la complexité de code que représente ta première solution.

    Et code complexe => code lourd à maintenir

    Mais même, admettons : à vue de nez, je dirais qu'une comparaison de booléens n'est pas plus rapide qu'une affectation de booléen. Dans le cas 2, on fait N affectations ; dans le cas 1, on fait N comparaisons et n affectations. (où N est ton nb d'élements dans la liste, et n le nombre d'éléments ayant BoolProp = true)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    Dans la premiére version tu vas parcourir l'ensemble de la collection. Puis faire à nouveau un parcours de la liste résultante. Donc je pense que le deuxiéme solution sera ( quasiment ) toujours la plus rapide.

    Il semblerait même qu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 0 ; i < list.Count; i++)
    est plus rapide que le foreach

    Évidemment coté lisibilité la question ne se pose pas ...

  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 karlus Voir le message
    Dans la premiére version tu vas parcourir l'ensemble de la collection. Puis faire à nouveau un parcours de la liste résultante.
    Non, la collection ne sera parcourue qu'une seule fois. Mais dans les 2 cas, elle sera parcourue en entier donc je ne pense pas qu'il y ait une différence notable entre les 2 solutions.
    Par contre, je suppose qu'ici _Items est une simple collection d'objets ? Parce que si c'est un ensemble d'entités Linq to SQL ou EF par exemple, et que la colonne est indexée, la 1e solution sera a priori plus rapide

  6. #6
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    Citation Envoyé par Guulh Voir le message
    A moins que tes collections ne contiennent des milliers / des millions d'objet, ou que tu fasse un traitement un peu lourd dans le set de ta propriété (du style un NotifyPropertyChanged), l'éventuelle petzouille de différence de perf ne vaut pas la complexité de code que représente ta première solution.

    Mais même, admettons : à vue de nez, je dirais qu'une comparaison de booléens n'est pas plus rapide qu'une affectation de booléen. Dans le cas 2, on fait N affectations ; dans le cas 1, on fait N comparaisons et n affectations. (où N est ton nb d'élements dans la liste, et n le nombre d'éléments ayant BoolProp = true)
    Merci pour vos point de vue.

    Pour ma part je pense que la complexité du set et du get de la propriété vont totalement decidé quel version je vais implementer.

    • Dans le cas ou la propriété est une simple variable, la Version 2 est plus adaptée.
    • Dans le cas ou le set est plus lent que le get, je vais prendre la Version 2
    • Dans le cas ou le set est plus rapide que le get, la version 1

  7. #7
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Citation Envoyé par ZaaN Voir le message
    Merci pour vos point de vue.

    Pour ma part je pense que la complexité du set et du get de la propriété vont totalement decidé quel version je vais implémenter.

    • Dans le cas ou la propriété est une simple variable, la Version 2 est plus adaptée.
    • Dans le cas ou le set est plus lent que le get, je vais prendre la Version 2
    • Dans le cas ou le set est plus rapide que le get, la version 1
    La règle d'or en terme d'optimisation de performance, c'est de mesurer la performance de chaque solution avec des jeux de données représentant des cas réels, et de statuer sur la solution à apporter par rapport aux résultats. Seuls les résultats te fournissent une idée de la performance d'un code. Les suppositions peuvent se montrer à des années lumière de la réalité, même sur des cas relativement simples.

    Et bien sûr, il est utile de reproduire ces tests régulièrement au fur et à mesure que le projet avance pour s'assurer qu'on utilise toujours la bonne solution. Ça peut même être instrumenté via des tests unitaires au besoin.

    En effet, le get et le set ne sont techniquement pas les seuls en cause dans le code produit. Tu as les mécanismes d'énumération par exemple, qui vont contribuer à la performance, au delà du get et du set.

    Une dernière chose : ces tests de performance doivent être faits avec le code compilé en mode Release, car le mode Debug désactive un paquet d'optimisation et ajoute des instructions nécessaires aux débuggers pour leur permettre de se brancher, et bien évidemment, tout cela influe sur les performances.

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

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. Algo de tri, extension
    Par Mouse dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/02/2003, 00h14
  3. Methode de drcherche a l,interieur de basse de donner texte
    Par philippe V dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 03/12/2002, 10h20
  4. Outils linux pour surveiller les perf d'un serveur ?
    Par MASSAKA dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 22/10/2002, 10h40
  5. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49

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