冬瓜 发表于 2013-10-11 07:57:46

ACE初用者的若干疑惑,求解。

刚接触ACE不久,纯属新人。初步了解了下ACE,深深的被其封装和设计哲学所吸引。但出于一些忧虑和疑惑,一直不敢将其使用于实际的商业项目,当然也有可能是我还不太了解的问题。
第一,初步浏览了下源码,发现在一些高速调用的地方使用new和delete,以及部分赋值操作实现低效,这会不是大大降低整体性能?
第二,在看到windows下的Proactor实现的时候,发现有个问题:假如我成功投递了n(n>=1)个读活写操作,在未完成的情况下,连接断开了,这个时候,这些投递的操作没能回收,这样会不会造成内存泄露?
第三,暂时不问第三了。

yunh 发表于 2014-2-19 15:38:17

    第一个问题,ACE有针对嵌入式应用的考虑,例如在动态分配这块儿,可以预先分配内存,例如ACE_Free_List。至于赋值操作实现低效,没有代码不好分析。
    第二个问题,Windows上的Proactor底层是使用完成端口来实现的,连接断开时,未完成的异步操作会继续通过端口通知应用,从而可以将这些内存回收。实际上,我在使用Proactor时,也经常发现有崩溃的情况,经过分析,发现这主要是由于ACE_Handler派生类对象已经被销毁,但系统仍保留其指针进行通知导致的,后来改为使用连接对象池,如果连接断开,对象被回收到池中,不被销毁,从而避免了这种情况。
页: [1]
查看完整版本: ACE初用者的若干疑惑,求解。