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

时间:2012-11-15 14:27:34

标签: delphi memory-management stream delphi-2009 indy

使用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;

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

1 个答案:

答案 0 :(得分:15)

当您将其分配到ContentStream属性时,Indy会成为您的信息流的所有者,并在不再需要时将其释放。

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