0
我想在TIdTCPServer实例中获取每个连接线程来将TADOConnection实例化到上下文中。Delphi(Indy + ADO)CoInitialize Slow
这工作正常,我将CoInitialize(nil)放置在OnConnect事件处理程序中。问题是这个过程需要大约20-25秒才能工作,这是很长的路...
有什么建议吗?
干杯, 阿德里安
我想在TIdTCPServer实例中获取每个连接线程来将TADOConnection实例化到上下文中。Delphi(Indy + ADO)CoInitialize Slow
这工作正常,我将CoInitialize(nil)放置在OnConnect事件处理程序中。问题是这个过程需要大约20-25秒才能工作,这是很长的路...
有什么建议吗?
干杯, 阿德里安
这是非常不可能的,要么CoInitialize()
或ADO需要那么长时间来初始化。多年来我一直在使用多线程COM,从未遇到过这样的延迟。
也就是说,初始化COM的更好的地方是在调用线程的Execute()
方法的顶部,而不是在服务器的OnConnect
事件中。要用Indy做到这一点,请从TIdThreadWithTask
中派生出一个新类并覆盖其BeforeExecute()
和AfterExecute()
方法。然后实例化一个TIdSchedulerOfThread...
组件,将其类别分配给它的ThreadClass
属性,并在激活服务器之前将其分配给服务器的Scheduler
属性。
非常感谢,你是对的,我误诊了罪魁祸首。它是这一行: TC2CContextdata(AContext.Data).ADOConnector:= TADOConnection.Create(nil); 其中左侧是TIdContext类型转换。为什么这会很慢? – Adrian 2012-08-08 04:20:58
你是如何计算代码的? – 2012-08-08 04:25:40
所有这些都在服务器的OnConnect事件上。 – Adrian 2012-08-08 04:26:01