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