使用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,完成了它的转移?
答案 0 :(得分:15)
当您将其分配到ContentStream
属性时,Indy会成为您的信息流的所有者,并在不再需要时将其释放。
编辑:假设您将FreeContentStream
属性设置为True
(这是默认设置)。