Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Playtime

"La technique est un moyen, pas une fin en soi"
Blog technique de Sébastien Carriere

Actualités


  • Mon messenger
Utiliser string.ToLower() c'est mal !

J'avoue que le titre de mon message est un peu racoleur :)

Nous allons cependant étudier le bout de code suivant :

if (val.ToLower() == "unevaleur")
{
   
// faire qqch
}

 

Ce type de test est présent dans de nombreux projets...

Rappelons juste que le Framework .Net fournit une méthode spécifique pour effectuer des comparaisons de "string".

On préférera donc écrire :

if (val.Equals("UneValeur", StringComparison.InvariantCultureIgnoreCase))
{
   
// faire qqch
}

 

Pourquoi ? L'une des raisons est les performances !

Voici le résultat d'une application testant les performances de chaque méthode :

 image

La méthode "string.Equals()" est juste 40 fois plus rapide que la méthode "xxx.ToLower() == yyy" !

L'utilisation de l'objet "StringBuilder" pour la concaténation de chaînes de caractères est entrée dans les mœurs, il faut faire pareil pour la comparaison des chaînes de caractères !

Note :
Pour plus d'information sur l'application console que j'ai utilisé pour tester les perfs, je vous invite a regarde le blog d'Antoine.

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 :
Posted: mardi 1 juillet 2008 14:00 par Sébastien CARRIERE

Commentaires

Alexandre Marlot a dit :

C'est vrai que personnellement j'utilise toujours le ToLower() :( Merci de cette information ! Je vais faire attention maintenant !

# juillet 1, 2008 14:27

sebmafate a dit :

Idéalement, ça devrait faire parti des optimisations du compilateur... mais ne révons pas.

Le travail sur les chaines est plus que compliqué : entre la concaténation, la comparaison, l'égalité...

# juillet 1, 2008 15:08

minsou a dit :

pareil qu'Alexandre, je me met désormais au StringComparison.InvariantCultureIgnoreCase ;-)

MinSou

# juillet 1, 2008 15:27

Matthieu MEZIL a dit :

Effectivement, c'est intéressant mais cependant ça ne marche pas avec tout. Par exemple avec LINQ To SQL/Entities, ça ne marche pas, il faut utiliser le .ToLower ou le .ToUpper.

# juillet 1, 2008 17:51

coq a dit :

Voir aussi Ordinal/OrdinalIgnoreCase pour les utiliser à la place de InvariantCulture/InvariantCultureIgnoreCase dès que c'est cohérent.

Une petit peu de lecture sur le sujet :

New Recommendations for Using Strings in Microsoft .NET 2.0 : http://msdn.microsoft.com/en-us/library/ms973919.aspx

# juillet 1, 2008 18:19

ROMELARD Fabrice a dit :

Oui mais qu'est ce que c'est bon le mal :)

C'est tellement plus simple de faire le tolower ou toupper à l'arrache :)

Je sais je sors.

Fabrice

# juillet 1, 2008 18:34

Jem a dit :

Et voilà comment doubler la longueur des lignes de code.

# juillet 1, 2008 20:39

Sébastien CARRIERE a dit :

Interressant, je vais regarder ce qui se passe avec linq to SQL.

Pour ceux qui aiment "l'arrache", je vous invite a regarder ce site qui en parle trés bien :

http://www.cafenware.org/la-rache/

:)

# juillet 1, 2008 20:51

fredhamel a dit :

Hello,

Merci pour cette méthode qui est l'une des méthodes recommandées pour faire de la comparaison de string.

Par contre pour les 40% plus rapides, je prendrais ça avec des pincettes.

Quand on voit que l'auteur du programme de test obtient dans son post "as versus cast" des résultats contradictoires avec les autres mesures faites ailleurs ça laisse perplexe.

# juillet 1, 2008 22:07
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Hello World! par Le blog de hamid le il y a 55 minutes

- MSBuild Extension Pack sur codeplex par Michel Perfetti [Miiitch] le il y a 2 heures et 14 minutes

- TCB : Travailler en équipe sans réseau par The Mit's Blog le il y a 5 heures et 24 minutes

- Accès anonyme et les pages Forms / viewlsts.aspx... par Nicolas Humann le il y a 9 heures et 17 minutes

- l'Atelier 4 du coach C# est disponible par Bernard Fedotoff le il y a 10 heures et 53 minutes

- [WPF] Formatter l’affichage lors d’un binding, via StringFormat par Thomas Lebrun le il y a 15 heures et 55 minutes

- WSC08 : Le bilan, Les Photos, Les Webcasts à voir ou à revoir par Blog de Daniel TIZON [daniel] le 10-07-2008, 01:14

- SharePoint et ses DB : Avez vous pensé à les "Tweaker" ? par The Mit's Blog le 10-07-2008, 00:45

- NTttcp : Mesurer la vitesse d'un réseau par Blog d'Olivier Huet le 10-07-2008, 00:21

- Un nouveau quizz par Matthieu MEZIL le 10-06-2008, 21:37