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