2010-10-19 6 views
0

Y a-t-il des inconvénients ou des ralentissements de performance liés à l'utilisation d'expressions comme... Dans ... Choisissez en C#

from i in Enumerable.Range(1, Math.Min(strTexto.Length, tamMax) + 1) 
       select Tuple.Create(strTexto.Substring(0, i - 1), strTexto.Substring(i - 1)) 

en C#? Est-il préférable de construire des "requêtes codées en dur" comme

foreach (Int32 IntTmp in SomeListWithTheRange) 
    SomeListWithTheTuples.Add(new Tuple<String, String> (strTexto.Substring(0, i - 1), strTexto.Substring(i - 1))) 

? Alors que le premier semble plus lisible à première vue, j'ai remarqué que ce type de requêtes peut devenir très lent ... Par exemple, la première requête prend 11ms à faire, tandis que la seconde ne prend que 1ms. Ai-je raison? Je veux juste m'assurer que j'ai besoin d'implémenter beaucoup de ces types de requêtes.

+0

de..in..le sélect n'est pas C# mais LINQ? Des références supplémentaires peuvent être nécessaires. – Bolu

+0

@Bolu: Vous ne pouvez pas dire exactement quelque chose est LINQ mais pas C# ou vice versa. LINQ n'est pas vraiment une langue distincte de C#, VB ou d'autres langages de programmation .NET. Je comprends votre point;) – BoltClock

Répondre

3

La première approche fonctionnera aussi bien que la seconde. Quand vous dites que vous avez "remarqué que ce genre de requêtes peut devenir très lent" - pourriez-vous fournir plus de détails? Vous pouvez certainement écrire des requêtes LINQ lentes, mais il s'agit d'utiliser LINQ de manière appropriée.

Notez que vos deux exemples de code ne sont pas équivalents pour le moment - le premier construit une requête, mais ne l'utilise pas du tout. Votre deuxième semble appeler Concat à plusieurs reprises, sera être lent lorsque vous passez dessus, car vous allez vous retrouver avec beaucoup d'itérateurs.

Si vous pouviez expliquer ce que vous essayez réellement de faire, cela aiderait beaucoup.

+0

Dans la méthode où j'utilise cette requête, j'ai le mot-clé '' return '' juste avant la requête afin qu'il retourne les résultats d'une manière énumérable. Il y a cependant une autre fonction, où j'utilise quatre fois '' Concat '', dont chacune a une requête du genre à l'intérieur. Cela peut-il ralentir les choses? – Miguel

+0

@Miguel: Encore une fois, vous devrez donner plus de détails. Il est très difficile de parler de performance basée sur des détails fragmentaires. Appeler Concat 4 fois ne sera probablement pas trop mauvais, mais vous * aurez * 4 niveaux d'indirection. –

Questions connexes