2012-03-26 5 views
5

n 개의 속성이있는 경우 .GetProperties O (n)의 Big-O이거나 복잡성을 추가하는 리플렉션과 관련된 프로세스가 있습니까? 다음이 호출이됩니다Big-O of .GetProperties()

public class Reflector 
{ 
public string name { get; set; } 
public int number { get; set; } 
public bool flag { get; set; } 
public List<string> etc { get; set; } 
} 

그리고 :

var reflect = new Reflector(); 
PropertyInfo[] properties = reflect.GetType().GetProperties(); 

시간 복잡도는 무엇인가, 즉 큰-O .GetProperties()의,

이 정의 된 클래스가 말? 4 개의 속성이 있다는 것을 고려하면,이 작업은 4 번의 반복 작업 만 수행 할 것인가 아니면 더 복잡한 작업입니까? 또는, 목록에 도달하는 데 몇 가지 표준 집합이있는 O (1)입니까? 속성 배열을 작성하는 데 O (n) 여야합니다.

+0

반복의 경우? 배열이 사전 제작 된 경우 반복이 포함될 수 있습니다. – dasblinkenlight

+0

@ dasblinkenlight - 속성 목록을 생성하는 데 사용되는 내부 프로세스의 반복입니다. 그 질문의 부분과 아래의 답변에서 나는 그 대답이'더 복잡했다 '고 생각한다. –

답변

3

Big-O는 점근 적 복잡성과 비슷합니다. 즉, O (n)은 n의 큰 값에만 관련이 있습니다.
클래스는 관련성을 높이기에 충분한 속성을 갖지 않습니다.

실용적으로 볼 때 O (1)을 고려할 수도 있지만 매우 큰 상수가 있습니다.

이러한 종류의 문제는 Big-O 표기법이 아닌 나노초 단위로 표시됩니다.

+0

나는 이것을 부적절하게 표현했을지 모른다는 것을 깨달았습니다. 내가 얻으려고했던 것은 반사의 내부 알고리즘의 복잡성이었습니다. –

+0

감사합니다. 나노 세컨드의 반사에 기반하여 다른 질문을하겠습니다. –

+0

시간은'T = A + B * n' 형식 일 것입니다. A >> B라고 추측하지만 측정해야합니다. 그리고 아마도 기본 클래스, 리플렉션 이전 호출 등과 같은 많은 요소에 의존 할 것입니다. –

3

그보다 더 복잡합니다. 알고리즘에는 기본 유형 체인도 포함되어야합니다. 또한 구현시 결과가 캐시 될 수 있으므로 상각 된 비용은 실제로 O (1) 일 수 있습니다.

하지만 실제로는 리플렉션이 매우 느립니다. 따라서 성능 목표를 달성 할 때까지 애플리케이션을 프로파일 링하고 변경해야합니다.

+0

왜 항상 느린가? –

+1

@ TravisJ 솔직히, 나는 특별한 이유가 없습니다. ASP.NET MVC 프레임 워크를 개발하고 성능 최적화를 담당하는 개인적인 경험은 항상 동일한 리플렉션을 수행하는 대신 리플렉션에서 파생 된 정보를 캐시 할 수 있다면 성능이 향상된다는 것입니다. 왜 프레임 워크가 마음에 그걸로 최적화되지 않았는지에 대한 나의 직감은 (결국, 그것은 정적으로 컴파일 된 런타임이다). – marcind