在实现IComMethodEvents时,您会得到三个事件。
- 方法调用
- 方法异常
- OnMethodReturn
我试图做的目标是记录 COM+ 组件中每个方法的调用时间。
可以通过在COMSVCSEVENTINFOlTime
结构中使用和检索事件的时间,因此通过在两者中记录该时间,我应该能够计算调用时间,但我如何确定这两个事件是相关的。lMicroTime
OnMethodCall
OnMethodReturn
通过测试它看起来我应该能够使用即时(JIT)激活对象oid
。
这样做有什么问题还是有其他方法?
一个可能的问题是,我看到oid
它经常被重用,所以如果事件由于某种原因被无序触发,实现关联可能会有点困难。
更新1:
进一步的测试表明,这oid
在多用户场景中是不够的。同时使用相同的对象,因此必须至少使用oid
和来完成相关性original caller
。一个后续问题是:如何从 COM+ 事件订阅者那里获取原始调用者?
更新 2:
刚刚找到IComMethod2Events。不同之处在于事件具有执行调用的线程的标识符。在测试中看起来很有希望,我无法想象相关性可能会失败的情况。COM+ 组件的线程模型是Any Apartment
.
更新 3
在这篇文章中,使用了创建 COM+ PerfMon 计数器来监视 COM+ 数据 oid
。我认为这在多线程公寓中是不够的。
注意:我最终将在 Delphi 中实现这一点,所以我添加了 Delphi 标记。我还添加了 C# 标记,因为用于实现接口的语言很可能根本不重要。更新:暂时添加 c++ 标签只是为了引起以前实际使用过这些东西的人的注意。