C++과 달리 가상 및 일반적인 메서드를 결합 할 수 있습니다. 예를 들어 표준 vtbl
접근이 메서드 호출을 해결하는 데 사용할 수처럼 Generic<T>
버전의 수를 인스턴스화 할 수있는 점을 감안제네릭을 사용한 C# 메서드 다형성의 성능
using System.Diagnostics;
class Base {
public virtual void Concrete() {Debug.WriteLine("base concrete");}
public virtual void Generic<T>() {Debug.WriteLine("base generic");}
}
class Derived : Base {
public override void Concrete() {Debug.WriteLine("derived concrete");}
public override void Generic<T>() {Debug.WriteLine("derived generic");}
}
class App {
static void Main() {
Base x = new Derived();
x.Concrete();
x.Generic<PerformanceCounter>();
}
}
, 그것은 보이지 않는, 사실 그렇지 않다. 생성 된 코드는 다음과 같습니다.
x.Concrete();
mov ecx,dword ptr [ebp-8]
mov eax,dword ptr [ecx]
call dword ptr [eax+38h]
x.Generic<PerformanceCounter>();
push 989A38h
mov ecx,dword ptr [ebp-8]
mov edx,989914h
call 76A874F1
mov dword ptr [ebp-4],eax
mov ecx,dword ptr [ebp-8]
call dword ptr [ebp-4]
여분의 코드는 generic 매개 변수에 따라 동적 vtbl을 찾은 다음 호출합니다. 이 구현의 세부 사항에 대해 작성한 사람이 있습니까? 비 제네릭 경우에 비해 얼마나 잘 수행됩니까?
정확히 내가 뭘 찾고 있었는지 고마워! – zildjohn01