События в C # - PullRequest
       23

События в C #

2 голосов
/ 02 октября 2008

Насколько медленнее события? Я написал потоковый синтаксический анализатор XML (который может обрабатывать открытые и неполные документы), и, выделив события и используя вместо этого интерфейс, я получил значительное повышение скорости.

Есть ли у кого-нибудь еще истории о войне?

(Давайте не будем открывать здесь банку с червями GC, мы все знаем, что она сломана:))

Ответы [ 5 ]

20 голосов
/ 02 октября 2008

События запускаются вызовами делегатов, которые немного медленнее, чем виртуальные вызовы

alt text
(источник: microsoft.com )

Но работа с интерфейсами для сценария подписчик / издатель / обозреватель / наблюдаемый более болезненна, чем использование событий.

4 голосов
/ 02 октября 2008

События на самом деле просто делегаты. Из того, что я помню, они были сделаны намного быстрее в 2.0 CLR. Я удивлен, что замена событий интерфейсом сделала ваш код значительно быстрее - по моему опыту, они довольно быстрые, и если вы имеете дело с XML, я бы не ожидал, что вызовы событий станут узким местом. *

Ваш код постоянно подписывался на события и отписывался от них? Есть ли у вас какие-либо данные о количестве вызовов событий, которые были сделаны при разборе определенного документа?

0 голосов
/ 02 октября 2008

Делегаты имеют небольшие накладные расходы по сравнению с вызовами виртуальных методов, поскольку они представляют собой списки методов и поэтому могут теоретически вызывать несколько обработчиков.

0 голосов
/ 02 октября 2008

События определенно медленнее, чем прямой вызов функции, я не могу точно сказать, насколько медленнее, но значительно. Вы также можете передать делегатов за "середину". Система событий .NET использует делегатов, но вызов метода напрямую через делегат против всей системы событий все еще быстрее.

0 голосов
/ 02 октября 2008

Если в вызовах нет отражения, то я предполагаю, что издержки довольно незначительны. Предположение может быть ошибочным, конечно. У вас есть микро тест, чтобы продемонстрировать это?

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