2010-03-24 6 views
8

C#의 특성 및 메타 데이터에 대한 웹에서 자습서를 읽습니다. 그것은 매우 시원하지만 그 의미를 궁금해합니다.C# 특성 및 메타 데이터 의미

  1. 어셈블리로드시 사용자 지정 특성이로드됩니까? 또는 리플렉션을 사용하여 메타 데이터를 검색하는 경우입니까?

  2. 실행 파일로 컴파일되기 때문에 속성이 코드 크기의 합계에 추가되는 것 같습니다. 이게 옳은 거니?

  3. 컴파일 타임 속성을 사용할 수 있습니까? 나는. 속성은 DEBUG가 정의 된 경우에만 적용됩니까?

    #if DEBUG 
    [MyCustomAttribute] 
    #endif 
    

    하지만 더 좋은 방법이 있는지 궁금 :

나는 하나 같이 어떻게 알아?

  1. 많은 특성을 사용할 때 성능/메모리 경고가 있습니까? 내 타겟 플랫폼은 Xbox 360 (C#/XNA 사용)입니다.

고마워요!

-Stephanus

답변

6

속성, 코드 및 생성자 인수 및 속성 데이터의 두 부분이 있습니다. 코드는 어셈블리의 IL에 저장되고 데이터는 어셈블리 메타 데이터에 저장됩니다. 속성을 사용하지 않으면 가상 메모리 공간 만 차지하지만 컴퓨터 자원은 필요하지 않습니다.

GetCustomAttributes() 메서드를 사용하기 전에는 아무 일도 발생하지 않습니다. 그런 다음 속성 클래스의 코드는 어셈블리의 일반 코드와 마찬가지로 JIT (Just-In-Time) 컴파일됩니다. 그리고 메타 데이터의 속성 데이터를 사용하여 생성자와 속성 설정자가 호출됩니다.메모리 관리자가 일리노이, 기계 코드 및 메타 데이터 페이지를 매핑 할 때 둘 모두에 대해 일부 RAM을 사용합니다.

4

1) AFAIK 속성은 게으른 인스턴스화,하지만 그들은 메모리에 어셈블리와 함께.
2) 걱정할 정도로 충분히 가까이 있지 않습니다. 크 누스 등
3) 예.

리플렉션을 사용한다는 것은 프레임 워크에서 수행 할 수있는 가장 느린 작업 중 하나 인 리플렉션을 사용한다는 것을 의미합니다. 그렇다면 응용 프로그램에 너무 느린가요? 당신이하고있는 일을 알지 못하면서 몇 밀리 초 안에해야 할 일을 놓고 아무에게도 아무에게도 이것에 대한 예 또는 아니오 대답을 줄 수 없습니다.

가장 좋은 것은 프로토 타입을 채찍질하고 IRL이 어떤 것인지 확인하는 것입니다. 다시, 크 누스 등

3
  1. 어셈블리로드시 속성이로드됩니다. 그것들은 타입 정보의 일부이기 때문에, 타입을 자동으로로드합니다.
  2. 속성이있는 조립품 크기 측면에서 (매우 작은) 비용이 있습니다. 그러나, 이것은 아주 사소한 것이고, 내가 염려할만한 것이 아닙니다.
  3. 사용자가 표시 할 수있는 방법으로 만이 작업을 수행 할 수 있습니다.
  4. 특성을 갖는 성능 영향은 없습니다. 리플렉션을 사용하여 명시 적으로 속성을 쿼리하지 않는 한 런타임에서 무시됩니다.