Meilleur auteur de réponses
Optimization Linq to object

Question
-
Bonjour tout le mon,
De façon générale, il existe des posts traitant des problématiques d'optimisation dans Linq to Object. Mais je n'ai pas encore réussi à trouver des articles qui traitent des problèmes plus "larges".
En l'occurrence, si on veut formuler une requête linq sur une collection d'objects (de taille très importante: dizaines ou centaines de milliers d'objets), il est indispensable de faire attention à la requête que nous formulons.
Notamment, au lieu de faire
requêtes 1 : maCollection.Select(e=>func(e)).Where(e=>condition(e)),
il faudrait plutot faire
requêtes 2 : maCollection.Where(e=>condition(e)).Select(e=>func(e))
Ma question est la suivante : sauriez vous s'il existe des framework, librairies ou tutoriaux qui pemettreraient d'optimisez de telles requêtes ?
Il existe plein de startégies d'optimisation dans la communauté base de données pour optimiser des requêtes. Est-il possible de s'en inspirer pour optimiser ces requêtes ?
Merci d'avance :)
Omar MERROUN Développeur .NET/Consultant Blog : http://merroun.wordpress.com/
Réponses
-
Bonjour,
Certaines fonctions Linq to Objects sont nativement optimisées en fonction du type d'interface que la collection implémente :
- Cast : si la collection implémente IEnumerable<T>
- Count et Contains : si la collection implémente ICollection ou ICollection<T>
- First, FirtsOrDefault, Last, LastOrDefault, ElementAt, ElementAtOrDefault, Single, SingleOrDefault: si la collection implément IList ou IList<T>
Il faut aussi faire attention à l'exécution différée. Quand vous écrivez une requête semblable à celle-ci:
var query = from item in storage select item;
La requête n'est pas exécutée. En revanche elle le sera à chaque fois que query est énumérée dans un foreach par exemple. Dans Linq to Sql et Linq to Entities, il est fondamental de connaitre cette notion car en fonction du besoin on aura tendance à l'utiliser ou pas.Cordialement,
aelassas.free.fr- Proposé comme réponse Ciprian Duduiala mardi 11 octobre 2011 06:10
- Marqué comme réponse Ciprian Duduiala mercredi 12 octobre 2011 06:24
-
Bonjour,
Linq est un language de requêtage objet et permet d'abstraire l'écriture de requête. (= C'est juste une bibliothèque permettant de simplifier l'écriture de code pour tout ce qui est parcours recherche).
Si vous voulez faire des recherches très rapides, vous devez trouver et créer une structure adéquate. Par exemple les IDictionary...
Dans la théorie absolue, lorsque l'on utilise Linq on ne devrait pas se soucier des performances. En utilisant Linq on recherche en priorité une abstraction et une facilité pour requêter sur des objets. Pour des performances, utilisez les structures et collections adéquates.
Cordialement
Gilles TOURREAU - MVP C#
Architecte .NET/Consultant/Formateur chez Winwise
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5- Proposé comme réponse Ciprian Duduiala mardi 11 octobre 2011 06:10
- Marqué comme réponse Ciprian Duduiala mercredi 12 octobre 2011 06:24
Toutes les réponses
-
Bonjour,
Certaines fonctions Linq to Objects sont nativement optimisées en fonction du type d'interface que la collection implémente :
- Cast : si la collection implémente IEnumerable<T>
- Count et Contains : si la collection implémente ICollection ou ICollection<T>
- First, FirtsOrDefault, Last, LastOrDefault, ElementAt, ElementAtOrDefault, Single, SingleOrDefault: si la collection implément IList ou IList<T>
Il faut aussi faire attention à l'exécution différée. Quand vous écrivez une requête semblable à celle-ci:
var query = from item in storage select item;
La requête n'est pas exécutée. En revanche elle le sera à chaque fois que query est énumérée dans un foreach par exemple. Dans Linq to Sql et Linq to Entities, il est fondamental de connaitre cette notion car en fonction du besoin on aura tendance à l'utiliser ou pas.Cordialement,
aelassas.free.fr- Proposé comme réponse Ciprian Duduiala mardi 11 octobre 2011 06:10
- Marqué comme réponse Ciprian Duduiala mercredi 12 octobre 2011 06:24
-
Bonjour,
Linq est un language de requêtage objet et permet d'abstraire l'écriture de requête. (= C'est juste une bibliothèque permettant de simplifier l'écriture de code pour tout ce qui est parcours recherche).
Si vous voulez faire des recherches très rapides, vous devez trouver et créer une structure adéquate. Par exemple les IDictionary...
Dans la théorie absolue, lorsque l'on utilise Linq on ne devrait pas se soucier des performances. En utilisant Linq on recherche en priorité une abstraction et une facilité pour requêter sur des objets. Pour des performances, utilisez les structures et collections adéquates.
Cordialement
Gilles TOURREAU - MVP C#
Architecte .NET/Consultant/Formateur chez Winwise
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5- Proposé comme réponse Ciprian Duduiala mardi 11 octobre 2011 06:10
- Marqué comme réponse Ciprian Duduiala mercredi 12 octobre 2011 06:24
-