programing

명부

yoursource 2021. 1. 14. 23:26
반응형

명부 아니면 카운트?


이 질문에 이미 답변이 있습니다.

나는 목록이 뭔가를하려는 경우가 아닌 경우 내가 먼저 그것을 확인 null또는 요소가없는 (A를 날려 버릴 수 없습니다 foreach) 그리고 일반적으로 사용 list.Any()하지만, 최선의 선택은 무엇인가 - 사용에 list.Count > 0, 또는 사용 list.Any()?


  • 크기를 알고 있으므로를 Count사용하는 경우 사용하십시오 List.
  • 사용 Length에 대한Array
  • 당신은 단지이 있다면 IEnumerable내가 사용하는 것이 .Any()이상 .Count()이 하나 개의 항목을 확인 후 정지 이후 더 빨리 될 것 같은.

또한 다음 질문을 확인하십시오. 어떤 방법이 더 잘 수행되는지 : .Any () 대 .Count ()> 0?


내가 사용 list.Count > 0는 LINQ 방법에 의존하지 않기 때문에 단지 등 C # 2.0에서 작동합니다.

나는 개인적으로 전염병과 같은 LINQ를 피하고 (느린 속도 때문에) 어쨌든 여기에서 확장 메서드를 사용할 이유가 없습니다.

그러나 더 나은 해결책은 참조를 받아 요소가있는 컬렉션 인 경우 true를 반환 하는 자체 버전을 Any만드는 것 null입니다. 그것은 당신에게 null 검사를 저장합니다.


.Any()일반적으로 .Count() > 0. 그 이유는 반복하는 항목이 아닌 경우 ICollection전체 목록을 반복하여 개수를 가져와야하기 때문입니다.

그러나 항목이 ICollection(즉 List<T>) 경우만큼 빠르거나 경우에 따라 사용하는 것이 더 빠릅니다 Count()( Any()MS .Net의 기본 유형에 관계없이 한 번 반복되지만 Mono는 Count > 0기본 항목이 인 경우 이를 최적화하려고 합니다 ICollection)

훌륭한 도구는 Reflector , .Net 소스 코드 및 Mono 소스 코드 로 구현 방법을 볼 수 있습니다.


Entity Framework를 사용하고 많은 레코드가있는 거대한 테이블이있는 경우 Any ()가 훨씬 빠릅니다. 한 번은 테이블이 비어 있고 행이 수백만 개인 지 확인하고 싶었던 적이 있습니다. Count ()> 0을 완료하는 데 20-30 초가 걸렸습니다. Any ()를 사용하면 즉각적이었습니다.


Any () 는 사물의 수를 얻기 위해 컬렉션을 반복 할 필요가 없기 때문에 성능을 향상시킬 수 있습니다. 그들 중 하나를 치면됩니다. 또는 LINQ-to-Entities의 경우 생성 된 SQL은 SELECT COUNT ... 또는 SELECT * ...가 아닌 IF EXISTS (...)가됩니다.

참조 URL : https://stackoverflow.com/questions/5741617/listt-any-or-count

반응형