将流传递给CommandGet后,什么时候可以释放?

non*_*one 9 delphi memory-management indy stream delphi-2009

使用indy TIdHTTPServer,在OnCommandGet上,有可能将带有数据的流传递给AResponseInfo.ContentStream.这很好.我何时可以发布该流?假设服务器可以获得多个请求,并且可以在给定时间处理任何请求,并且一个流可以完成另一个流的任意.

流可以在哪里被释放?

代码示例:

var
  StreamsToFree : TList;

//assume StreamsToFree := TList.create; properly 

procedure TObject.IdHttpServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
stream : TFileStream;
begin
  stream := TFileSTream.create('file.name');
  AResponseInfo.ContentStream := stream;
  AResponseInfo.ResponseNo := 200;
  StreamsToFree.Add(generateReceiptXML);  
end;
Run Code Online (Sandbox Code Playgroud)

什么时候可以释放流?什么甚至,我们如何知道IdHttpServer,完成了它的转移?

Ond*_*lle 15

当您将其分配给ContentStream属性时,Indy将成为您的流的所有者,并在不再需要时将其释放.

编辑:假设您将FreeContentStream属性设置为True(这是默认值).