2012-11-15 10 views
8

z indy TIdHTTPServer, na even z OnCommandGet, istnieje możliwość przekazania do AResponseInfo.ContentStream strumienia z danymi. co jest w porządku. Kiedy mogę zwolnić ten strumień? przy założeniu, że serwer może uzyskać wiele żądań, a każde żądanie może zostać obsłużone w określonym czasie, a jeden strumień może zostać arbitralnie przypisany do drugiego.po przekazaniu strumienia do CommandGet, kiedy można go zwolnić?

gdzie można uwolnić strumień?

przykład kod:

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; 

Kiedy strumień uwolniony? w jaki sposób i w jaki sposób znamy IdHttpServer, zakończyliśmy transfer?

Odpowiedz

14

Po przypisaniu go do właściwości ContentStream, Indy staje się właścicielem strumienia i zwolni go, gdy nie będzie już potrzebny.

Edycja: Zakładając, że pozostawiono właściwość FreeContentStream ustawioną na True (która jest domyślna).

Powiązane problemy