Есть COM-объект, его использует моё приложение.
COM-объект имеет множество событий, мое приложение использует только несколько из них. Когда я создаю этот COM-объект, моё приложение сильно загружает процессор.
Я оттрейсил его профайлером и обнаружил что процессор загружается обработкой событий на которые я в своей программе не подписывался!
Получается .net обрабаытвает все события COM-объекта не зависимо от того, подписан я на них или нет?
Могу ли я както выключить такую обработку и обрабатывать только те которые нужны мне или можно ли как то перегенерить interop обёртку чтобы в ней небыло тех ненужных событий?
Re: COM interop обрабатывает все события от COM объекта
От:
Аноним
Дата:
19.10.10 23:49
Оценка:
Здравствуйте, Titov Andrew, Вы писали:
TA>Доброго времени суток!
TA>Есть COM-объект, его использует моё приложение. TA>COM-объект имеет множество событий, мое приложение использует только несколько из них. Когда я создаю этот COM-объект, моё приложение сильно загружает процессор.
TA>Я оттрейсил его профайлером и обнаружил что процессор загружается обработкой событий на которые я в своей программе не подписывался!
TA>Получается .net обрабаытвает все события COM-объекта не зависимо от того, подписан я на них или нет?
TA>Могу ли я както выключить такую обработку и обрабатывать только те которые нужны мне или можно ли как то перегенерить interop обёртку чтобы в ней небыло тех ненужных событий?
А кто писал этот объект и есть ли сорс? Если в констракторе самого объекта стоит подписка, то одно из двух — это надо для его правильной функциональности, или два — сам COM+ неправильно написан. не думаю, что все так просто. Скорей всего, объект делает много того, на что и подписываться в клиенте не надо, и это предусмотрено его кодом. Может я и неправ, это первое, что пришло на ум.
Re: COM interop обрабатывает все события от COM объекта
Здравствуйте, Titov Andrew, Вы писали:
TA>Есть COM-объект, его использует моё приложение. TA>COM-объект имеет множество событий, мое приложение использует только несколько из них. Когда я создаю этот COM-объект, моё приложение сильно загружает процессор.
TA>Я оттрейсил его профайлером и обнаружил что процессор загружается обработкой событий на которые я в своей программе не подписывался! TA>Получается .net обрабаытвает все события COM-объекта не зависимо от того, подписан я на них или нет?
TA>Могу ли я както выключить такую обработку и обрабатывать только те которые нужны мне или можно ли как то перегенерить interop обёртку чтобы в ней небыло тех ненужных событий?
В COM нет "индивидуальных" событий — там есть callback интерфейсы. То, что эти интерфейсы на managed стороне выглядят как события это всего лишь дополнительный "сахар".
В любом случае, обработка пустых событий не должна занимать значительное время. Чем именно знимается .net код и как выглядит "событийный" интерфейс?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.