TIdHttp.Free需要30秒

时间:2015-02-23 02:14:52

标签: indy indy10

回到1月7日我更新到Indy 10的最新版本(我知道这是不正确的礼节:但我怎么能在源代码中告诉我的确切版本?)我最近发现了 TIDHttp的情况.Free 需要30秒才能执行。我将其追溯到两个 TIDHttp 对象同时被实例化的情况。它需要30秒才能释放一个,然后另外30秒释放另一个。我很确定这与Indy 10的先前版本没有发生。一旦我重新编写代码以在创建第二个对象之前释放第一个对象,一切正常(即没有30秒延迟)。下面的代码是一个简化的例子。虽然我跑这个时没有延迟。不幸的是,我将IdHttp对象作为我框架中其他对象的成员嵌入。因此,使用简单的应用程序很难进行模拟。

在下面的代码中,我的修复是在第二个实例的TIdHttp.Create之前移动 idhttp1.free; 调用。

有什么想法吗?我想如果需要我可以尝试简化我的实现。

procedure TForm1.Button1Click(Sender: TObject);
var
  idhttp1,idhttp2: TIDHttp;
  IdSSLIOHandlerSocket1,IdSSLIOHandlerSocket2: TIdSSLIOHandlerSocketOpenSSL;
begin
  idhttp1 := tidhttp.Create(nil);
  IdHTTP1.reusesocket := rsTrue;
  idhttp1.handleredirects := True;
  IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IdSSLIOHandlerSocket1.reusesocket := rsTrue;
  IdHTTP1.IOHandler := IdSSLIOHandlerSocket1;
  idhttp1.get('https://www.google.com');


  idhttp2 := tidhttp.create(nil);
  idhttp2.handleredirects := True;
  IdHTTP2.reusesocket := rsTrue;
  IdSSLIOHandlerSocket2 := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IdSSLIOHandlerSocket2.reusesocket := rsTrue;
  IdHTTP2.IOHandler := IdSSLIOHandlerSocket2;
  idhttp2.get('https://www.google.com');


  idhttp1.free;
  idhttp2.free;
  showmessage('done');
end;

0 个答案:

没有答案
相关问题