2011-01-31 1 views
0

나는 중학교의 개발자이며 아래의 샘플 코드가 좋은 연습인지 잘 모르겠습니다. 메서드의 매개 변수로 현재 클래스 인스턴스를 전달하여 성능에 영향이 있는지 알고 싶습니다. 또한 여러 가지 방법으로 전달하여 성능에 미치는 영향은 무엇입니까? 아래 코드에 대해 조언 해주십시오.이 키워드를 사용하는 메서드에 상속 된 클래스를 param으로 전달할 때 메모리가 어떻게 할당됩니까?

Class X: Y 
{ 

    Z myObject = new Z(); 
    myObject.MethodA((Y)this); 
} 


Class Z 
{ 

    MethodA(Y y) 
    { 
    y.Mystream = Write Element 
    MethodB(ref y) 
    MethodC(ref y) 

    } 
    MethodB(ref Y y) 
    { 
    y.Mystream = Write Element 

    } 
} 


Class Y 
{ 
    Public XMLTextWriter Mystream = null; 
} 

답변

2

첫 번째 경우 (MethodA(this))에는 참조 사본이 값으로 전달됩니다. 이것은 엄청나게 빠릅니다. 응용 프로그램에서 병목 현상이 없다는 것을 보장합니다.

두 번째 경우 (MethodB(ref y))에는 참조의 저장 위치가 메서드로 전달됩니다. 이것은 엄청나게 빠릅니다. 응용 프로그램에서 병목 현상이 없다는 것을 보장합니다.

+0

알아두면 좋을 것 같습니다. 나는 이것이 전달 될 때 참조 사본이 값으로 전달된다는 것을 알지 못했다. 고맙다. – user596342

+0

이제 나는 그것에 대해 더 생각한다. 나는 MethodA (이)에 대해 100 % 명확하지 않다. 클래스 X는 인스턴스를 갖고있다. Y를 상속합니다. 전체 객체를 힙이나 주소에 복사합니까? 또한 MethodB (ref Y) y는 다른 메소드로 전달되는 xml 스트림입니다. 따라서 클래스 x가 인스턴스화 될 때마다 스트림을 만들고 닫음으로써 오버 헤드가 발생하지 않습니까? – user596342

+0

@ user596342 그것은 단지 참고서입니다 (실제 주소는 주소이지만, 두 사람이 같은 것을 주장하면 어떤 사람들은 매우 화가납니다); 개체 자체는 복사되지 않습니다. 스트림을 열고 닫을 때 - 시나리오에 좀 더 구체적으로 설명해야합니다. –

관련 문제