Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

N’utilisez Single que quand c’est nécessaire sinon utilisez First !

J’ai vu plusieurs développeurs utiliser la méthode Single quand ils voulaient récupérer un élément alors qu’ils savaient que le Single ne retournerait qu’un seul élément. C’est mal !!!

Dans ce cas, il faut utiliser la méthode First.

Le but de la méthode Single est de retourner un seul élément (comme la méthode First) mais aussi de s’assurer qu’il n’y a bien qu’un seul résultat.

Concrètement, qu’est-ce que cela signifie. Regardons de plus près le code suivant :

int tick = Environment.TickCount;
int value = Enumerable.Range(0, int.MaxValue).First(i => i == 10);

Console.WriteLine(Environment.TickCount - tick);

La console affiche 62. La méthode First a parcouru 11 éléments dans la collection.

Maintenant faisons la même chose avec Single :

int tick = Environment.TickCount;
int value = Enumerable.Range(0, int.MaxValue).Single(i => i == 10);

Console.WriteLine(Environment.TickCount - tick);

La console affiche 28720 ! La méthode a parcouru les 2147483648 éléments pour s’assurer qu’il n’y avait pas de doublon !

cqfd

C’est la même chose avec LINQ To Entities. Avec un First, c’est une requête SQL avec un TOP 1 qui sera exécutée ; avec un Single, c’est une requête SQL avec un TOP 2 qui sera exécutée ce qui aura bien sûr une incidence sur les perfs. Bien entendu, si vous vous limittez à une condition sur une colonne indexée, l’impact sera quasi nul.

Alors oui le Single (ou SingleOrDefault) c’est utile mais si et seulement si on veut s’assurer qu’il n’y a bien qu’un seul élément (et lever une exception dans ce cas). Si ce n’est pas le cas, il faut la bannir du code et lui préférer la méthode First (ou FirstOrDefault).

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié jeudi 25 février 2010 07:23 par Matthieu MEZIL

Classé sous : , ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 6 heures et 41 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59