【问题标题】:.NET / COM events interoperability.NET/COM 事件互操作性
【发布时间】:2008-12-28 23:27:09
【问题描述】:

我有一个由 TlbImp.exe 生成的互操作程序集,生成的类事件较多,性能非常重要。

但是有一个问题,事件似乎以这样的方式注册/取消注册/调用,即使是空的事件处理程序也被计算在内。 给定一组 1..N 事件,当您将处理程序注册到事件 3 时,它看起来像这样:

{dummy1, dummy2, eventHandler3, dummy4 ... dummyN}

当有很多经常引发的事件时,这会产生很大的开销。

所以问题是,有没有更好的方法来处理 .NET 中的 COM 事件?有什么工具什么的,还是我必须从头开始重写互操作程序集的事件代码?

【问题讨论】:

  • 您能否提供代码示例让我们在我们的机器上重现该问题?

标签: c# .net com interop com-interop


【解决方案1】:

为什么不只允许 .NET 通过执行 Using 语句来构建互操作?

除非您明确设置,否则不应调用任何事件。

例子:

http://code.msdn.microsoft.com/SEHE

如您所见,上面的示例设置了许多事件。

【讨论】:

  • 它会为您调用 TlbImp.exe。而且这种方式非常慢,因为它为定义事件的每种类型创建 SinkHelper。
【解决方案2】:

通过使用自定义Advise/Unadvise callbakcs 解决。

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多