2011-06-10 4 views
16

개체에 800 개가 넘는 속성을 추가하는 사양을 받았습니다. 개체가 C# (또는 .NET)에 가질 수있는 속성 수에 대한 '제한'이 있습니까?.NET 클래스의 속성 수에 제한이 있습니까?

이 많은 특성을 가진이 클래스의 개체와 관련하여 성능에 미치는 영향이 있습니까?

감사합니다.

+44

키보드에서 3 단계 뒤로 이동하십시오. 실행을 시작하십시오. 멈추지 마. –

+21

@Russel : 추가 할 것은 한 가지 : 시작하기 전에 180을하십시오;) –

+0

몇 가지 제한이 있습니다. 하지만 1000보다 훨씬 높다고 가정합니다. – CodesInChaos

답변

33

메타 데이터는 어셈블리 당 최대 24 비트 참조/정의를 가질 수 있습니다. 부동산 인 경우 부동산 당 2 가지 방법이 필요합니다. 따라서 제한은 전체 어셈블리에 대해 23 비트 또는 1 << 23 - 1이됩니다.

업데이트 :

그들은 읽기 전용 속성입니다, 한계는 1 << 24 - 1 될 경우. 두 번째 질문에

답변 :

아니, 더 성능 오버 헤드가 없을 것입니다. JIT는 간단한 속성을 인라인 할 가능성이 높습니다.

어떤 생각 :

당신은 위의 한계에 도달하지 않습니다. 1600 만개의 속성을 가진 이미징. 1600 만 개의 문자열이 이름에 저장되어야합니다. 평균 이름이 8 자라고하면 ~ 256MB (속성 이름 + 메서드 이름)의 문자열 표 크기를보고 있으며 아직 코딩을 시작하지 않았다고 가정합니다. 그냥 생각.

+0

속성 자체에 메타 데이터 슬롯이 필요하지 않습니까? 2^24/3과 같은 결과가 될 것입니다. – CodesInChaos

+1

@CodeInChaos : 다른 테이블 :) – leppie

+7

애매하게 대답하지 않고 실제로 대답을 알고있는 것을 보아 반갑습니다. "나는 한계가 있다고 생각하지 않지만, 틀린 디자인 "이라고 확신합니다. +1 – jalf

관련 문제