读书人

COM调用效率比较低- 不知小弟我的理解

发布时间: 2012-02-11 09:51:34 作者: rapoo

COM调用效率比较低--- 不知我的理解对不对?
COM调用效率比较低.
如果函数之间频繁调用或大数据传送,就不要试图通过COM接口实现。
而是要将封装在一个类中,通过一般的函数调用来实现。

COM接口主要用于参数的传递等不是频繁使用,传递数据不大的情况。


不知我的理解对不对?

[解决办法]
不会的

有些接口会比较慢 ,比如脚本语言通过IDispatch来实现功能,
但如果,客户端,服务器都用C++实现,那效率是可以保证的
[解决办法]
不对,在C++中,它同样是通过虚函数机制调用的,不会慢的,和普—ll调用一样。
只是自动化COM(实现了IDispatch接口),在脚本语言或者C++中明确通过IDispatch::Invoke方式进行调用的时候才比较慢。
[解决办法]
其实,LZ说得也是有道理的,比起C++程序来说,COM调用的效率在某些情况下会受到一定的影响:
1. 首先就是COM组建的创建.COM组件的创建需要查询注册表,使用厂接口来创建,可能需要花点时间.
2. 当COM组件创建后通过接口调用方法,对于复杂的参数,通过都会封装成VARIANT类型,并需要将它们转化成具体的数据类型,可能这里又需要花点时间.
呵呵,其实这些都是很小的时间消耗,很多情况下都可以忽略不计:)
[解决办法]
DCOM效率低,进程内的COM组建比DLL效率高
[解决办法]
IDispatch的效率有些低是对的。

IUnknown系的接口,效率低不低,要看对象运行的线程模型。普通的单线程套间类型也比较低(就是通过message+marshaling的那种),其他如Single的以及Both的都不会低,COM库在这方面有优化,自动发现不需要message+marshaling就自动避免。

具体哪些个线程模型会走哪条路线我还真不清楚,个人认为线程模型是微软COM实现里的最大败笔---怕是若干年后连他们自己人也搞不太清楚了。
[解决办法]
其实效率低还有一个原因大家都没说到
我也只是从理论上说:marshal。。。

读书人网 >VC/MFC

热点推荐