2012-08-08 86 views
0

我想在TIdTCPServer实例中获取每个连接线程来将TADOConnection实例化到上下文中。Delphi(Indy + ADO)CoInitialize Slow

这工作正常,我将CoInitialize(nil)放置在OnConnect事件处理程序中。问题是这个过程需要大约20-25秒才能工作,这是很长的路...

有什么建议吗?

干杯, 阿德里安

回答

3

这是非常不可能的,要么CoInitialize()或ADO需要那么长时间来初始化。多年来我一直在使用多线程COM,从未遇到过这样的延迟。

也就是说,初始化COM的更好的地方是在调用线程的Execute()方法的顶部,而不是在服务器的OnConnect事件中。要用Indy做到这一点,请从TIdThreadWithTask中派生出一个新类并覆盖其BeforeExecute()AfterExecute()方法。然后实例化一个TIdSchedulerOfThread...组件,将其类别分配给它的ThreadClass属性,并在激活服务器之前将其分配给服务器的Scheduler属性。

+0

非常感谢,你是对的,我误诊了罪魁祸首。它是这一行: TC2CContextdata(AContext.Data).ADOConnector:= TADOConnection.Create(nil); 其中左侧是TIdContext类型转换。为什么这会很慢? – Adrian 2012-08-08 04:20:58

+0

你是如何计算代码的? – 2012-08-08 04:25:40

+0

所有这些都在服务器的OnConnect事件上。 – Adrian 2012-08-08 04:26:01