Это быстрее; используя event.Invoke(args) или просто вызывая event(args). Какая разница? Быстрее или медленнее, чем другой; или это просто вопрос предпочтения?
Event.Invoke(args) против события (args). Что быстрее?
Ответ 1
Запись someDelegate(...) является сокращением компилятора для someDelegate.Invoke(...).
Они оба скомпилируются с той же командой IL — a callvirt на этот тип типа делегата Invoke.
Метод Invoke генерируется компилятором для каждого конкретного типа делегата.
Напротив, метод DynamicInvoke, определенный в базовом типе Delegate, использует отражение для вызова делегата и медленный.
Ответ 2
Когда вы вызываете event(args), компилятор С# превращает его в вызов IL для event.Invoke(args). Это то же самое - например, с помощью string или System.String.
Ответ 3
Оба способа в конечном итоге генерируют точно такой же IL, поэтому нет никакой разницы в их вызове.
Если у вас проблемы с производительностью, такие изменения вряд ли помогут вам, если вообще. Если у вас нет проблем с производительностью, тогда нет причин задавать такие вопросы вообще.
Ответ 4
С введением null-conditionals в С# 6.0, Invoke можно использовать для упрощения поточной проверки нуль делегатов, Если раньше вам приходилось делать что-то вроде
var handler = event;
if (handler != null)
handler(args);
комбинация ?. и Invoke позволяет просто написать
event?.Invoke(args)