Count 속성 대 Count () 메서드?
컬렉션으로 작업하면 개체 수를 얻는 두 가지 방법이 있습니다. 메서드를 계산 (속성) 및 Count ()합니다. 누구든지 주요 차이점이 무엇인지 알고 있습니까? 내가 틀렸을 수도 있지만 Count () 메서드가 내가 '얻기'전에 Count가 이미 할당되어 있어야하는 컬렉션에 대해 일종의 쿼리를 수행한다고 가정하기 때문에 항상 모든 조건문에서 Count 속성을 사용합니다. 그러나 그것은 추측입니다. 내가 틀렸다면 성능이 영향을 받을지 모르겠습니다.
편집 : 호기심에서 컬렉션이 null이면 Count ()에서 예외가 발생합니까? Count 속성이 단순히 0을 반환한다고 확신하기 때문입니다.
Count()
확장 메서드 의 소스를 디 컴파일하면 객체가 ICollection
(제네릭 또는 기타) 객체인지 테스트 하고 그렇다면 단순히 기본 Count
속성을 반환합니다 .
따라서 코드 Count
가를 호출 하는 대신 액세스 하는 Count()
경우 유형 검사를 우회 할 수 있습니다. 이론적 인 성능 이점이 있지만 눈에 띄는 이점이 아닐 수도 있습니다!
// System.Linq.Enumerable
public static int Count<TSource>(this IEnumerable<TSource> source)
{
checked
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null)
{
return collection.Count;
}
ICollection collection2 = source as ICollection;
if (collection2 != null)
{
return collection2.Count;
}
int num = 0;
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
num++;
}
}
return num;
}
}
성능은 둘 중 하나를 선택하는 유일한 이유입니다. .Count ()를 선택하면 코드가 더 일반적이됩니다. 더 이상 컬렉션을 생성하지 않는 일부 코드를 리팩토링 한 적이 있지만 대신 IEnumerable과 같은 좀 더 일반적인 코드를 리팩토링했지만 다른 코드는에 의존 .Count
하고 .Count()
. .Count()
어디에서나 사용하도록 지적 하면 코드를 더 재사용하고 유지 관리 할 수 있습니다. 일반적으로 더 일반적인 인터페이스를 사용하는 것이 최선의 방법입니다. 좀 더 일반적인 것은 더 많은 유형으로 구현되는 더 간단한 인터페이스를 의미하므로 코드 간의 호환성이 향상됩니다.
내가 .Count()
작성하는 코드의 재사용 가능성을 더 많이 다루는 다른 고려 사항이 있다고 말하는 것입니다.
이 .Count()
메서드 는 충분히 똑똑하거나 해당 유형에 대해 알고있을 수 있으며, 그렇다면 기본 속성을 사용할 수 있습니다 .Count
.
다시 말하지만 그렇지 않을 수도 있습니다.
컬렉션 .Count
자체 에 속성 이있는 경우 성능과 관련하여 최선의 선택이 될 것이라고 가정하는 것이 안전하다고 생각합니다 .
는 IF .Count()
방법은 컬렉션에 대해 알고하지 않습니다, 그것은 O (N) 작업이 될 것이다, 그 위에 열거됩니다.
Count () 메서드는 IEnumerable <>의 각 요소를 반복하고 요소 수를 반환하는 확장 메서드입니다. IEnumerable의 인스턴스가 실제로 List <>이면 모든 요소를 반복하는 대신 Count 속성을 반환하도록 최적화되어 있습니다.
Count 또는 Length 속성이있는 경우 일반적으로 전체 컬렉션을 반복하여 그 안의 요소 수를 계산하는 Count () 메서드보다 항상이를 선호해야합니다. (예를 들어, Count () 메서드가 Linq to SQL 또는 Linq to Entities 소스에 대한 경우는 예외입니다.이 경우 데이터 소스에 대해 개수 쿼리를 수행합니다. 그런 경우에도 Count 속성이 있으면 할 일이 적기 때문에 선호합니다.)
Count () 메서드는 모든 IEnumerable <>에서 작동하는 LINQ 메서드입니다. Count () 메서드가 전체 컬렉션을 반복하여 개수를 찾을 것으로 예상 할 수 있지만 실제로 LINQ 코드에는 Count 속성이 있는지 여부를 감지하고 사용하는 경우이를 감지하기위한 몇 가지 최적화가 있습니다.
따라서 둘 다 거의 동일한 작업을 수행해야합니다. Count 속성은 유형 검사가 필요하지 않기 때문에 약간 더 좋습니다.
짧은 버전 : Count
속성과 Count()
방법 중에서 선택할 수있는 경우 항상 속성을 선택합니다.
The difference is mainly around the efficiency of the operation. All BCL collections which expose a Count
property do so in an O(1) fashion. The Count()
method though can, and often will, cost O(N). There are some checks to try and get it to O(1) for some implementations but it's by no means guaranteed.
Count()
is there as an extension method from LINQ - Count
is a property on List
s, actual .NET collection objects.
As such, Count()
will almost always be slower, since it will enumerate the collection / queryable object. On a list, queue, stack etc, use Count
. Or for an array - Length
.
참고URL : https://stackoverflow.com/questions/7969354/count-property-vs-count-method
'code' 카테고리의 다른 글
Promise 배열을 순차적으로 실행하려면 어떻게해야합니까? (0) | 2020.10.21 |
---|---|
스타일에 대한 Angular 2.0 바인딩 값 (0) | 2020.10.21 |
MongoDB Aggregation : 총 레코드 수를 얻는 방법은 무엇입니까? (0) | 2020.10.20 |
플래시 메시지가 사라지지 않는 이유는 무엇입니까? (0) | 2020.10.20 |
MySQL에서 월 및 연도별로 그룹화 (0) | 2020.10.20 |