2012-03-30 4 views
6

단위 테스트 및 조롱을 수용하려면 메서드 및 속성을 가상으로 선언하는 것이 일반적입니다. 가상이 아닌 가상을 선언 할 때 성능에 미치는 영향이 있습니까?가상 메서드의 성능 영향

+0

? 흠 ... –

+0

@StefanHanke : 영업 사원이 그것이 * 단지 *라고 생각한다고 말하지는 않습니다. –

+0

그래, 필요하지 않을 때해야한다고 생각하지 않는다 ... 적절할 때 테스트 가능성을 향상시킬 수있는 유일한 방법이다. – TGH

답변

9

일반적으로 가상 메소드가 Callvirt Opcode를 사용하여 호출되는 반면 가상 메소드는 표준 Call Opcode를 사용하지 않는다는 차이점이 있습니다. Call Opcodes는 Callvirt보다 확실히 빠르지 만, 필자는 이걸 바탕으로 설계 결정을 내릴만큼 충분히 충실하지 못했습니다.

Premature optimization is the root of all evil.

+0

IIRC, C# 컴파일러는 가상인지 여부에 관계없이 모든 인스턴스 메서드에 대해 CallVirt를 사용합니다. 그런 식으로 CLR이 무효 검사를 수행합니다. –

+0

@ JohnSkeet 그렇다면 하루가 끝나면 아무런 차이가 없다는 것을 의미합니까? – TGH

+0

좋은 점 John - 필자가 생각하기에 값 유형 인스턴스 메소드를 제외하고 컴파일러가 Opcodes.Call을 내 보냅니다. – Jeff

1

아니요.

주목할 부분이 아닙니다.

1

나는 구체적인 몰라,하지만 난 당신이 거기에 애플 리케이션의 99 %에 대해 걱정할 필요가 없습니다 것을 알고있다.

btw - 클래스 대신 모의 인터페이스를 선택하면 가상 메소드가 필요하지 않습니다.

행운을 빌어 요, 톰

당신은 모든 걸`virtual` 모든 클래스`open`을하고있다 testability_에 대한 _design 생각
+0

당신은 인터페이스를 가상 방법으로 사용하는 것과 같은 간접적 인 페널티가 있습니다. – leppie

관련 문제