【问题标题】:Delphi (Indy + ADO) CoInitialize SlowDelphi (Indy + ADO) 初始化慢
【发布时间】:2012-08-08 03:42:51
【问题描述】:

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

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

有什么建议吗?

干杯, 阿德里安

【问题讨论】:

    标签: delphi indy


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢;你说得对,我误诊了罪魁祸首。就是这一行: TC2CContextdata(AContext.Data).ADOConnector := TADOConnection.Create(nil);左侧是 TIdContext 类型转换。为什么会这么慢?
    • 这一切都在服务器的 OnConnect 事件上。
    • 这不是我问的。你怎么知道TADOConnection.Create() 需要 20 多秒才能运行?你是怎么计时的?您是否在使用分析器,例如 AQTime?你在计算 CPU 滴答声吗?你在使用性能计数器吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2018-08-25
    • 2014-11-18
    相关资源
    最近更新 更多