Delphi(Indy+;ADO)协同初始化慢

Delphi(Indy+;ADO)协同初始化慢,delphi,indy,Delphi,Indy,我试图让TIdTCPServer实例中的每个连接线程将一个TADOConnection实例关联到上下文中 这很好,我将CoInitialize(nil)放在OnConnect事件处理程序中。问题是这个过程大约需要20-25秒,这是一个漫长的过程 有什么建议吗 干杯, Adrian初始化CoInitialize()或ADO都不太可能需要那么长的时间。我已经使用多线程COM多年了,从未经历过这样的延迟 也就是说,初始化COM的更好位置是在调用线程的Execute()方法的顶部,而不是在服务器的OnC

我试图让TIdTCPServer实例中的每个连接线程将一个TADOConnection实例关联到上下文中

这很好,我将CoInitialize(nil)放在OnConnect事件处理程序中。问题是这个过程大约需要20-25秒,这是一个漫长的过程

有什么建议吗

干杯,
Adrian

初始化
CoInitialize()
或ADO都不太可能需要那么长的时间。我已经使用多线程COM多年了,从未经历过这样的延迟


也就是说,初始化COM的更好位置是在调用线程的
Execute()
方法的顶部,而不是在服务器的
OnConnect
事件中。要使用Indy实现这一点,请从
TIdThreadWithTask
派生一个新类,并重写其
beforecute()
afterecute()方法。然后实例化一个
TIdSchedulerOfThread…
组件,将您的类分配给它的
ThreadClass
属性,并在激活服务器之前将其分配给服务器的
Scheduler
属性。

初始化
CoInitialize()
或ADO都不太可能需要那么长时间。我已经使用多线程COM多年了,从未经历过这样的延迟


也就是说,初始化COM的更好位置是在调用线程的
Execute()
方法的顶部,而不是在服务器的
OnConnect
事件中。要使用Indy实现这一点,请从
TIdThreadWithTask
派生一个新类,并重写其
beforecute()
afterecute()方法。然后实例化一个
TIdSchedulerOfThread…
组件,将您的类分配给它的
ThreadClass
属性,并在激活服务器之前将其分配给服务器的
调度程序
属性。

非常感谢;你说得对,我把罪犯误诊了。这行代码是:TC2CContextdata(AContext.Data).ADOConnector:=TADOConnection.Create(nil);其中左侧是TIdContext类型转换。为什么会这么慢?所有这些都是服务器的OnConnect事件。这不是我要问的。您如何知道运行
TADOConnection.Create()
需要20秒以上的时间?你是怎么定时间的?你在用剖析器吗,比如AQTime?你在数CPU滴答声吗?您使用的是性能计数器吗?非常感谢;你说得对,我把罪犯误诊了。这行代码是:TC2CContextdata(AContext.Data).ADOConnector:=TADOConnection.Create(nil);其中左侧是TIdContext类型转换。为什么会这么慢?所有这些都是服务器的OnConnect事件。这不是我要问的。您如何知道运行
TADOConnection.Create()
需要20秒以上的时间?你是怎么定时间的?你在用剖析器吗,比如AQTime?你在数CPU滴答声吗?您使用的是性能计数器吗?