당신은 동적 조립 및 방법을 포함 할 동적 유형을 생성 할 필요없이 생성 및 실행시 방법 을 실행하기 위해 DynamicMethod 클래스를 사용할 수 있습니다. JIT (Just-In-Time) 컴파일러에서 만든 실행 가능 코드는 DynamicMethod 개체 을 회수 할 때 재사용됩니다. 동적 메서드는 을 생성하고 소량의 코드를 실행하는 가장 효율적인 방법입니다.
I는 다음과 같은 코드가 :
Type returnType = typeof(string);
Type[] argTypes = { typeof(string), typeof(IEnumerable<string>) };
var dynamicMethod = new DynamicMethod("DynamicMethod1", returnType, argTypes);
ILGenerator ilGen = dynamicMethod.GetILGenerator();
const string Returned = "returned";
ilGen.Emit(OpCodes.Ldstr, Returned);
ilGen.Emit(OpCodes.Ret);
var handler =
(Func<string, IEnumerable<string>, string>)
dynamicMethod.CreateDelegate(typeof(Func<string, IEnumerable<string>, string>));
즉, 난 간단한 본체 동적 생성 방법을, 그럼 정적 속성 위임을 저장할. 이 대리인의 여러 호출 후 reclaim/메서드를 수집하고 다른 본문을 다시 만들고 (나는 인터프리터 언어를 작성, 내 사용자 지정 구문을 MSIL 바이트 코드 - 컴파일러 같은 해석합니다) 정적 속성에 새 대리자를 저장합니다.
동적 방법을 명시 적으로 수집/재 확보 할 수있는 방법은 무엇입니까?
C#에서 모든 개체와 같은 방법에 따라 "모든 세대의 즉각적인 가비지 수집을 강제로"당신이 그것을 수집 할 때 그러나 GarbageCollector을 알 수 있습니다. 그것을 참조하지 않고 수집하도록하십시오. –
동적 메서드에 대한 모든 참조를 제거하면 GC가 메모리에서이 메서드를 제거하는 순간을 알지 못하며 같은 이름 ("DynamicMethod1")을 사용하여 새 메서드를 만들 수 없다는 것을 알지 못합니다. –
물론 전달하는 이름은 범위 지정 목적과 전혀 관련이 없습니다. 그렇지 않은 경우, 다른 API가 같은 이름의 메소드를 작성하려고하면 어떤 일이 발생합니까? 모든 참조를 제거하고 나중에 언젠가는 수집하도록 허용하고, 언제든지 대체 구현을 작성하십시오. 중요한 것은'(임의의) 이름이 아닌'DynamicMethod'의 인스턴스에 대한 핸들입니다. –