2011-03-16 4 views
13

이들은 동일합니다 : 그래서더 나은, Enumerable.Empty <T> 또는 새로운 [0]?

IEnumerable<string> i; 
i = Enumerable.Empty<string>(); 
i = new string[0]; 

, 어떤을 사용할 수 있나요?

첫 번째 의도는 더 명확하게 의사 소통한다고 생각하지만 디버거에서는 추악한 것은 말할 것도없고 더 크고 시끄럽다. 두 번째는 Reflector를 올바르게 읽는다면 메모리와 CPU에서 더 효율적입니다.

나는 new type[0]을 향해 몸을 기울이고 있지만 모두가 생각하는 것을 알고 싶었습니다.

답변

20

Enumerable.Empty<T> 빈 배열의 생성을 캐시하므로 동일한 배열이 항상 반환되며 두 번째 명령문은 각 호출마다 새로운 배열을 만듭니다.

나는 프로그래머의 의도를보다 분명하게 보여주기 때문에, 또한 메모리 사용으로 인해 명시 적 어레이 생성을 사용하면 관리 프로그램에서 조기에 최적화되기 때문에 런타임은 거의 항상 어쨌든 프로세스에 필요한 메모리.

5

EmptyEnumerable에 대한 대리자로서 길이가 0 인 배열을 반환합니다. 그러나 동일한 배열을 반환 할 때마다 매번 동일한 배열을 반환하고 그 빈 배열을 영원히 유지합니다.

7

성능/메모리 사용량의 차이는이 상황에서 매우 무시할 수 있으므로 내 결정적인 요소는 아닙니다.

개인적으로 Enumerable.Empty을 사용 하겠지만 주로 개발자의 의도를 매우 분명하게 설명하고 있습니다.

관련 문제