목록: 카운트 대 카운트()
목록이 주어졌을 때 내부의 요소 수를 결정하기 위해 선호되는 방법은 무엇입니까?
var myList = new List<string>();
myList.Count
myList.Count()
Count()는 LINQ에 의해 도입된 확장 방법입니다.Count속성은 목록 자체의 일부입니다(에서 파생됨).ICollection. 하지만 내부적으로 LINQ는 당신의IEnumerable도구들ICollection그리고 만약 그렇다면 그것은 그것을 사용합니다.Count소유물.그래서 결국에는 어떤 것을 사용하는지에 대한 차이가 없습니다.List.
내 요점을 더 증명하기 위해, 여기 리플렉터의 코드가 있습니다.Enumerable.Count()
public static int Count<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
ICollection<TSource> is2 = source as ICollection<TSource>;
if (is2 != null)
{
return is2.Count;
}
int num = 0;
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
num++;
}
}
return num;
}
항상 선호Count그리고.Length확장 메서드에 대한 유형의 속성Count()전자는 이들을 포함하는 모든 유형에 대해 O(1)입니다.그Count()확장 메서드에는 O(1) 시간에도 실행되도록 할 수 있는 몇 가지 유형 검사 최적화가 있지만 기본 컬렉션이 알고 있는 몇 가지 유형 중 하나가 아니면 O(N)로 저하됩니다.
myList.Count는 목록 개체의 메서드이며, 필드 값만 반환하므로 매우 빠릅니다.이것은 작은 방법이기 때문에 컴파일러(또는 런타임)에 의해 인라인화될 가능성이 매우 높기 때문에 컴파일러가 다른 최적화를 수행할 수 있습니다.
myList.Count()는 IEnumberable의 모든 항목을 루프하는 확장 메서드(LINQ에서 도입)를 호출하므로 속도가 훨씬 느려야 합니다.
그러나 (Microsoft 구현에서) Count 확장 메서드에는 목록의 Count 속성을 사용할 수 있는 Lists에 대한 "특수한 경우"가 있습니다. 이는 Count() 메서드가 Count 속성보다 조금 느리다는 것을 의미합니다.
대부분의 응용 프로그램에서 속도 차이를 구별할 수 없을 것입니다.
따라서 목록을 처리 중인 경우 Count 속성을 사용하고, 그렇지 않은 경우 "알 수 없는" IE 번호가 있는 경우 Count() 메서드를 사용하여 최적화되도록 하십시오.
만약 당신이 당신의 컬렉션의 유형을 바꾸고 싶다면 당신은 더 나은 서비스를 제공할 것입니다.Count()연장의이렇게 하면 코드를 재팩터링할 필요가 없습니다(사용하기 위해).Length예를 들어).
언급URL : https://stackoverflow.com/questions/4098186/lists-count-vs-count
'programing' 카테고리의 다른 글
| xsd에서 .NET 4.0 클래스를 생성하는 방법은 무엇입니까? (0) | 2023.05.22 |
|---|---|
| 인증서 서명 요청을 얻는 방법 (0) | 2023.05.22 |
| URL 내부 어딘가에 있는 routerLink에 매개 변수를 전달하는 방법은 무엇입니까? (0) | 2023.05.22 |
| 파일의 전체 경로에서 디렉터리를 가져오려면 어떻게 해야 합니까? (0) | 2023.05.22 |
| Excel에서 숫자 형식을 수천(K)으로 지정합니다. (0) | 2023.05.22 |