Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 22799|Répondre: 1

[Source] Linq : N’utilisez jamais Count() > 0 pour déterminer que l’ensemble n’est pas vide

[Copié le lien]
Publié sur 12/10/2017 13:25:01 | | | |
Avant Linq, nous utilisions généralement la méthode suivante pour déterminer si une collection n’est pas vide, c’est-à-dire si une collection contient des éléments :


En utilisant les attributs Longueur ou Compte, il n’y a aucun problème avec l’écriture ci-dessus.

Mais à l’époque de Linq, la méthode d’extension Enumerable.Count « unifiait » les propriétés Length et Count, ce qui aboutit à la manière suivante d’écrire pour juger la non-nullité :


Cette écriture est correcte et fonctionne bien, mais elle peut causer de très sérieux problèmes de performance.

Notez que c’est possible, pas nécessairement, et si la méthode ci-dessus est intégrée sous forme de <T>tableau, de liste ou de collection<T>, il n’y aura aucun problème.



Alors, quand quelque chose va-t-il mal tourner ? Voyons les méthodes suivantes :


Lorsqu’on l’appelle :



La vitesse d’exécution sera assez lente, et il a fallu environ 70 secondes à mon ordinateur pour exécuter le code source. Count() > 0。


Si vous l’analysez, vous verrez que le rendement i dans la ligne 5 du code GetNums s’exécute int. MaxValue, est-ce nécessaire ?

En fait, tant que nous retournons un élément, nous pouvons conclure que l’ensemble est non vide, et qu’il n’est pas nécessaire de retourner tous les éléments.

Alors, comment juger ? Nous pouvons utiliser la méthode d’extension Enumerable.Any :



Modifiez la méthode SomeAction comme suit :



Répétez et vous constaterez que le temps d’exécution est négligeable.


Pour résumer, Count() > 0 aura inévitablement des problèmes de performance lorsqu’il rencontrera un retour de main.






Précédent:Implémentation en C# de trois minuteurs
Prochain:Js chaîne à date et date plus day
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com