Показать сообщение отдельно
  #1  
Старый 17.01.2013, 14:00
Pcrepair
 
Сообщения: n/a
По умолчанию Замена указателей на Локал. Перем при работе функции в потоке

Добрый день. есть код загрузчика, использующий указатели:

Код:
function LoadPage(const Url: String): RawByteString;
var
  HTTP: TIdHTTP;
  HtmlPage: TMemoryStream;
  T:TStringList;
begin
  T:=TStringList.Create;
  HTTP := TIdHTTP.Create(nil);
  try
    HtmlPage := TMemoryStream.Create;
    try
      HTTP.HandleRedirects := True;
      HTTP.Get(Url, HtmlPage); (*получаем данные в поток памяти*)
      (*------------------------------------------*)
      SetLength(Result, HtmlPage.Size);
      Move(HtmlPage.Memory^, Pointer(Result)^, HtmlPage.Size);
      (*------------------------------------------*)
    finally
      FreeAndNil(HtmlPage);
    end;
  finally
    FreeAndNil(HTTP);
    FreeAndNil(T);
  end;
end;
и такой код, использующий локальную переменную Т

Код:
function LoadPage(const Url: String): RawByteString;
var
  HTTP: TIdHTTP;
  HtmlPage: TMemoryStream;
  T:TStringList;
begin
  T:=TStringList.Create;
  HTTP := TIdHTTP.Create(nil);
  try
    HtmlPage := TMemoryStream.Create;
    try
      HTTP.HandleRedirects := True;
      HTTP.Get(Url, HtmlPage); (*получаем данные в поток памяти*)
      (*---------------------------*)
        HtmlPage.Position:=0;
        T.LoadFromStream(HtmlPage);
        Result:=T.Text;
      (*---------------------------*)
    finally
      FreeAndNil(HtmlPage);
    end;
  finally
    FreeAndNil(HTTP);
    FreeAndNil(T);
  end;
end;

Внимание! Вопрос:
- какой вариант функции предпочтительнее для использования в потоке (многопоточная загрузка страниц), учитывая использование памяти.
- не будет ли в первом варианте вероятности использования одних и тех же сегментов памяти разными потоками
Ответить с цитированием