2012-11-15 8 views
8

with indy TIdHTTPServer、OnCommandGetの場合でも、データを含むストリームをAResponseInfo.ContentStreamに渡す可能性があります。 これは問題ありません。 そのストリームをいつリリースできますか? サーバが複数のリクエストを受け取ることができ、任意のリクエストが所定の時間に処理され、1つのストリームが他のリクエストに対して任意に終了することができると仮定します。ストリームがCommandGetに渡された後、いつ解放できますか?

ストリームは解放されますか?

コード例:

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が何を知っているのですか?

答えて

14

プロパティをContentStreamプロパティに割り当てると、Indyがストリームの所有者になり、不要になったときに解放されます。

編集:(既定値)に設定されたFreeContentStreamプロパティをそのままにするとします。

関連する問題