回到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;