Есть много сообщений по ускорению вызовов отражения, примеры здесь:
Ускорение API отражения с делегатом в .NET / C #
https://codeblog.jonskeet.uk/2008/08/09/making-reflection-fly-and- explore-delegates /
и здесь:
Пример: ускорение Reflection API с делегатом в .NET / C #
Мой вопрос касается ускорения общих вызовов. Возможно ли это вообще?
У меня есть абстрактный класс и класс, который его реализует ...
public abstract class EncasulatedMessageHandler where T : Message
{
public abstract void HandleMessage(T message);
}
public class Handler : EncasulatedMessageHandler
{
public int blat = 0;
public override void HandleMessage(MyMessageType message) { blat++; }
}
Я хочу создать список этих классов обработчиков сообщений и быстро вызвать их HandleMessage ()
На данный момент я делаю примерно следующее:
object handler = Activator.CreateInstance(typeof(Handler)); // Ignore this, this is done up front.
MethodInfo method = type.GetMethod("HandleMessage", BindingFlags.Instance | BindingFlags.Public);
Action
Это еще не все, но это важные вещи ...
Метод method.Invoke очень медленный, я бы хотел сохранить общие параметры класса, я понимаю, что могу заблокировать это для объекта и передать его в метод HandleMessage, но я стараюсь этого не делать.
Могу я что-нибудь сделать, чтобы это ускорить? Сейчас это на порядки медленнее, чем прямые звонки.
Любая помощь будет принята с благодарностью.