Как вызвать делегат быстрее, чем с помощью DynamicInvoke? - PullRequest
7 голосов
/ 11 октября 2010

В настоящее время я использую DynamicInvoke, что очень медленно. Все еще используя тип Delegate, как я могу напрямую вызвать Delegate без позднего связывания / DynamicInvoke?

Delegate _method;    
_method.DynamicInvoke(_args);

Спасибо.

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

Фреймворк с открытым исходным кодом Impromptu-Inteface добавляет метод расширения Delegate, называемый FastDynamicInvoke, который работает чуть более чем в 20 раз быстрее, чем DynamicInvoke, используя DLR вместо отражения.

using ImpromptuInterface

...

_method.FastDynamicInvoke(_args);
0 голосов
/ 11 октября 2010

Invoke быстрее, но немного "спрятано". С MSDN для класса делегата

Общая языковая среда выполнения метод Invoke для каждого делегата тип с той же подписью, что и делегировать. Вам не нужно называть это метод явно из C #, Visual Basic или Visual C ++, потому что компиляторы вызывают это автоматически. Метод вызова полезен в отражении когда вы хотите найти подпись тип делегата.

Это означает, что при создании типа делегата компилятор добавляет элемент Invoke с правильной подписью. Это позволяет звонить без прохождения DynamicInvoke

В c # вы используете это как:

_method(_args);
//or
_method(typedArg1, typedArg2, andSoOn);

вызывая его как обычный метод. На самом деле это вызывает Invoke, что должно быть намного быстрее для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...