2010-08-14 4 views
3

Я использую TWebModule с Apache. У меня проблемы с утечкой памяти. В приведенном ниже коде не освобождается ImageStream утечка памяти? Если я освобожу его, я получаю нарушение доступа.Не освобождает TMemoryStream, вызывающий утечку памяти?

procedure TWebModule1.WebModule1WebActionItem8Action(Sender: TObject; 
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); 
    var 
    RecNo: Integer; 
    ImageStream: TmemoryStream; 
    begin 
    RecNo := StrToInt(Request.QueryFields.Values['RecNo']); 
    Master.MoveBy(RecNo - Master.RecNo); // go to right record 
    ImageStream := TMemoryStream.Create; 
    with TGraphicField.Create(Master) do 
    try 
     FieldName := 'Graphic'; 
     SaveToStream(ImageStream) 
    finally 
     Free 
    end; 
    ImageStream.Position := 0; // reset ImageStream 
    Response.ContentType := 'image/jpg'; 
    Response.ContentStream := ImageStream; 
    Response.SendResponse 
    end; 

ответ

4

От here:

Если вы используете свойство ContentStream, не освобождают поток самостоятельно. Объект ответа автоматически освобождает его для вас.

Сказав это, зачем вообще использовать ImageStream? Почему бы просто не использовать:

Response.ContentStream := TMemoryStream.Create 

и сохранить изображение в этом потоке напрямую?

+0

Спасибо, я ожидал, что это будет ответ. И я тоже воспользуюсь вашей идеей. Моя утечка памяти должна быть где-то еще! –

Смежные вопросы