2009-04-18 5 views
0

현재 Jon Skeet이 C#을 깊이 읽고 있으며 값 및 참조 유형에 대해 읽었습니다.많은 값 유형을 매개 변수로 전달하는 성능

전달 될 때 그 값이 복사되기 때문에 값 유형을 메소드 매개 변수로 사용하는 비용에 대해 생각하게되었습니다. 정수를 고려할 때이 비용은 그다지 크지 않지만 그 값 매개 변수가 여러 번 통과 한 문자열 인 경우 무엇입니까?

StringBuilder 클래스를 말하고 문자열 유형 대신 전달하는 것이 이점이 있습니까?

문자열이 길고 길이가 1024 문자라고 생각하고 메서드간에 몇 번만 전달 된 경우 참조의 값이 4가되는 동일한 값을 가진 StringBuilder와는 대조됩니다 또는 매번 8 바이트를 사용하면 상당한 성능 향상을 얻을 수 있습니다.

이 질문은 String 유형과 관련하여 실종 될 수도있는 중요한 부분을 강조하고 필요할 때이를 지적하십시오.

또한 각 인스턴스의 문자열과 관련하여 가비지 수집에 어떤 영향을 미칩니 까?

편집 : 명백하게 질문을 무효로 만드는 문자열에 관한 중요한 정보를 잊어 버렸습니다. 고맙습니다.

답변

8

String은 값 유형이 아니며 단지 변경 불가능한 객체입니다.

문자열을 전달하면 다른 개체와 동일한 비용이 발생합니다. 참조 크기는 Win32에서 4 바이트입니다.

추가 참고 사항 : 값 형식 의미 (값 전달 기준)는 컴파일러에서 최적화 된 방식으로 구현할 수 있습니다. 나는 MS JIT가 그것을 어떻게하는지 보지 못했지만 확실히 포인터 만 보낼 수 있고 쓰기를 할 때 타겟을 요구할 수있다.

이것은 우리가 Managed Operating System Alliance JIT/AOT 컴파일러에서 수행 할 것입니다.

관련 문제