Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 22799|Resposta: 1

[Fonte] Linq: Nunca use Count() > 0 para determinar que o conjunto não é vazio

[Copiar link]
Publicado em 12/10/2017 13:25:01 | | | |
Antes do Linq, geralmente usávamos o seguinte método para determinar se uma coleção é não vazia, ou seja, se uma coleção contém elementos:


Usando os atributos Comprimento ou Contagem, não há problema com a escrita acima.

Mas na era Linq, o método de extensão Enumerable.Count "unificava" as propriedades Comprimento e Contagem, resultando na seguinte forma de escrever para julgar a não nulidade:


Essa escrita é boa e funciona bem, mas pode causar problemas de desempenho muito sérios.

Note que é possível, não necessariamente, e se o método acima for passado como um Array<T>, Lista ou <T>Coleção, não haverá problema.



Então, quando algo vai dar errado? Vamos analisar os seguintes métodos:


Quando chamado:



A velocidade de execução será bem lenta, e levou cerca de 70 segundos para meu computador executar a fonte. Contagem() > 0。


Se você analisar, verá que o retorno de rendimento i na linha 5 do código GetNums executa int. MaxValue, é necessário?

Na verdade, desde que retornemos um elemento, podemos concluir que o conjunto é não vazio, e não há necessidade de devolver todos os elementos.

Então, como julgar? Podemos usar o método de extensão Enumerable.Any:



Modifique o método SomeAction da seguinte forma:



Chame de novo e você verá que o tempo de execução é insignificante.


Resumindo, Count() > 0 inevitavelmente terá problemas de desempenho quando encontrar retorno de energia.






Anterior:Implementação em C# de três temporizadores
Próximo:JS string to date e date plus day
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com