У меня есть сборка взаимодействия, созданная TlbImp.exe, сгенерированные классы сильно распределены, а производительность очень важна.
Но есть проблема: кажется, что события регистрируются / не регистрируются / вызываются таким образом, что учитываются даже пустые обработчики событий. Учитывая набор событий 1..N, когда вы регистрируете обработчик для события 3, это выглядит так:
{dummy1, dummy2, eventHandler3, dummy4 ... dummyN}
Это создает большие накладные расходы, когда очень часто возникает много событий.
Итак, вопрос в том, есть ли лучший способ работы с событиями COM в .NET? Любой инструмент или что-то еще, или мне нужно переписать код события сборки взаимодействия с нуля?





Почему бы просто не позволить .NET построить взаимодействие, выполнив оператор Using?
События не должны вызываться, если вы их явно не задали.
Пример:
http://code.msdn.microsoft.com/SEHE
Как видите, в приведенном выше примере задается много событий.
Это вызывает для вас TlbImp.exe. И этот способ очень медленный, поскольку он создает SinkHelper для каждого типа, который определяет события.
Решено с помощью пользовательских обратных вызовов Advise / Unadvise.
Можете ли вы предоставить нам образцы кода, чтобы воспроизвести проблему на наших машинах?