2010-03-10 2 views
3

가능한 중복 :
Do generic interfaces in C# prevent boxing? (.NET vs Mono performance)제네릭 권투 대

내가 완전히 복싱/언 박싱 작업 제거합니까, 제네릭을 사용하여 하나 개의 빠른 질문 ...이?

예를 들어 목록을 사용하여 여전히 많은 복싱/언 박싱을 수행합니까? 클래스가 올바르게 기록 된 경우 내가 인터넷에 여러 문서를 읽은 있지만이 특정 문제를 해결할 수

...

+1

예. 피하십시오 목록 하시기 바랍니다. –

답변

6

후 사용하여 제네릭 모든 권투와 언 박싱을 방지 할 수 있습니다. 대신, just-in-time 컴파일러는 값 유형을 올바르게 처리하는 클래스의 각 버전에 대한 코드를 생성합니다.

+0

+1 값 유형을 명시 적으로 나타냅니다. – overslacked

+0

-1 클래스가 박스 화되거나 박스 화되지 않았습니다. - 복싱은 값 유형에만 해당됩니다. 클래스 객체에 대한 제네릭의 장점은 강력한 타이핑이지 no-boxing이 아닙니다. – pm100

+2

@ pm100 : "클래스의 각 버전"은 일반 클래스를 의미합니다. 매개 변수로 제공되는 각 유형에 대해 다른 버전이 있습니다. JIT는 제공된 각 값 유형에 대해 서로 다른 코드를 작성합니다. 또한 모든 참조 유형을 처리하는 단일 버전을 작성합니다. –

6

올바르게 사용하는 경우 : 예, 복싱을 제거합니다. 예를 들어

,

List<int> table = new List<int>(); 
table.Add(1); 
int x = table[0]; 

는 복싱/언 박싱을 포함하지 않습니다.