여기 반사를 가속화에 게시물을 많이 호출, 예제가 있습니다. 여기가속화 반사 호출 C#을/NET
Speeding up Reflection API with delegate in .NET/C#
https://codeblog.jonskeet.uk/2008/08/09/making-reflection-fly-and-exploring-delegates/
하고 :
Example : Speeding up Reflection API with delegate in .NET/C#
제 질문은 일반적인 호출 속도를 높이는 것에 관한 것입니다. 이것이 가능합니까? 나는 추상 클래스를 구현하는 클래스를 가지고
...
내가 그들의 HandleMessage을 (이 메시지 핸들러 클래스의 목록을 구축하고 신속하게 호출되어 수행 할 작업을public abstract class EncasulatedMessageHandler<T> where T : Message
{
public abstract void HandleMessage(T message);
}
public class Handler : EncasulatedMessageHandler<MyMessageType>
{
public int blat = 0;
public override void HandleMessage(MyMessageType message) { blat++; }
}
)
object handler = Activator.CreateInstance(typeof(Handler)); // Ignore this, this is done up front.
MethodInfo method = type.GetMethod("HandleMessage", BindingFlags.Instance | BindingFlags.Public);
Action<object> hook = new Action<object>(delegate(object message)
{
method.Invoke(handler, new object[] { message });
});
// Then when I want to invoke it:
hook(new MyMessageType());
: 순간
, 나는 약이 뭔가를하고 있어요 모든 것은 아니지만, 그것은 중요한 물건
...
method.Invoke, 나는 내가 이것을 잠글 수 실현, 클래스에 일반 매개 변수를 유지하고 싶습니다 매우 느립니다 개체 및 HandleMessage 메서드에서 그것을 캐스팅하지만이 일을 피하기 위해 노력하고있어.
이 작업을 빠르게 처리 할 수있는 방법이 있습니까? 현재 직접 전화보다 느린 속도입니다.
도움을 주시면 감사하겠습니다.
이것은 RuntimeBinderException을 던져 버리는 것 같습니다 : 'X'에 대한 가장 오버로드 된 메소드 일치가 잘못된 인수를가집니다. – Rob
@Rob :'((동적) 핸들러) .HandleMessage ((동적) 메시지)'는 어떻습니까? – Gabe
그게 효과가! :) 우와! – Rob