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 :

linq ou foreach


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 262
    Par défaut linq ou foreach
    Bonjour,
    je travaille sur un projet que l'on vient de passer du framework 2.0 à 3.5.
    Et donc je découvre linq, ma question est la suivante, avant pour filtrer une liste nous faisions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    List<Fruit> liste= ChargerListe();
    List<Fruit> listefiltre= new List<Fruit>();
     
    foreach (Fruit fruit in liste)
    {
        if (monfiltre(fruit))
        {
            listefiltre.Add(fruit);
        }
    }
    maintenant avec linq, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<Fruit> liste= ChargerListe();
    List<Fruit> listefiltre= (from fruit in liste
    where monfiltre(fruit)
    select fruit).toList<Fruit>();
    Ma question est la suivante, est ce 'cosmétique' ou est ce plus performant ?
    Par avance merci

  2. #2
    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
    Salut,

    Citation Envoyé par snopims Voir le message
    Ma question est la suivante, est ce 'cosmétique' ou est ce plus performant ?
    Par avance merci
    tout depends de ce pour quoi tu vas l'utiliser...

    De toute façon, à moins que tu ne travailles sur gde trés gros ensembles de résultat, la différence, si elle existe, sera probablement infime

    Après, si tu veux *vraiment* un gain en perf, il faudrait mettre monfiltre(fruit) avant

    La meilleur règle, à mon avis, c'est d'écrire le code le plus clair possible, et de l'optimiser si besoin

    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.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Citation Envoyé par Philippe Vialatte Voir le message
    La meilleur règle, à mon avis, c'est d'écrire le code le plus clair possible, et de l'optimiser si besoin
    Tout à fait. Une des nombreuses idées derrière Linq est d'apporter de le concision dans l'écriture de ce genre de requête.
    Main concis ne veut pas forcément dire clarté. J'ai souvent été confronté à des requêtes Linq complexes dont la compréhension et le debug est extrêmement difficile. Il vaut mieux essayer de découper en plus petites requêtes.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    @cybermaxs: Je pense que c'est bien plus que ça. Ca regroupe déjà tout un tas d'algos de tris, de selection, jointures, etc... que tu te tapais à la main avant...
    Là c'est du code mature & réutilisable.

    Ensuite pr le côté perf, n'oublions pas que tant qu'on a pas balayé la requête, celle ci reste au stade de IEnumerable... Celle ci sera lancée qu'au moment ou on fera un ToList(), un foreach dessus ou autre...
    Ensuite la clarté ça restera au développeur de l'assurer (comme toujours).. En plus tu as 2 manières de l'écrire... Pour ma part je préfère la version plus "method-style" que "sql-style"...

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    @cybermaxs: Je pense que c'est bien plus que ça. Ca regroupe déjà tout un tas d'algos de tris, de selection, jointures, etc... que tu te tapais à la main avant...
    Là c'est du code mature & réutilisable.
    Oui, c'est pour ça que j'avais précisé Une des nombreuses idées.

    Ensuite pr le côté perf, n'oublions pas que tant qu'on a pas balayé la requête, celle ci reste au stade de IEnumerable... Celle ci sera lancée qu'au moment ou on fera un ToList(), un foreach dessus ou autre...
    Disons simplement que si tu n'es pas dans une application très calculatoire ou avec beaucoup de données, ça n'est pas le peine de se soucier des perfs.

    Ensuite la clarté ça restera au développeur de l'assurer (comme toujours).. En plus tu as 2 manières de l'écrire... Pour ma part je préfère la version plus "method-style" que "sql-style"...
    idem

  6. #6
    Membre confirmé Avatar de Marsupilami_00
    Profil pro
    Architecte logiciel
    Inscrit en
    Janvier 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Janvier 2007
    Messages : 102
    Par défaut
    Bonjour,

    La méthode Linq est plus rapide que le Foreach. Par ailleurs Linq donne plus de choix sur la façon de traiter une liste.

Discussions similaires

  1. comment remplacer un foreach par du LINQ ?
    Par jmclej dans le forum Linq
    Réponses: 8
    Dernier message: 01/12/2014, 13h52
  2. comment remplacer un foreach par du LINQ ?
    Par jmclej dans le forum C#
    Réponses: 6
    Dernier message: 01/12/2014, 13h18
  3. Réponses: 4
    Dernier message: 14/09/2005, 17h23
  4. [C#] ArrayList, foreach et suppression
    Par lalystar dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/04/2005, 11h42
  5. [langage] foreach, last et valeurs de sortie
    Par Herode dans le forum Langage
    Réponses: 6
    Dernier message: 01/04/2005, 14h37

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