[Delphi] zwalnianie pamięci

0

W jaki sposób mogę zwolnić pamięć po utworzonych w czasie pracy programu komponentach?

for numer:=0 To 10 Do
With THTTPGet.Create(Form1) do
begin
FileName:=...
URL:=...
GetFile;
end;

Napisałem sobie coś takiego i usuwa, ale chciałbym żeby nie sprawdzało wszystkich, tylko wyszukało komponenty typu HTTPGet i usunęło (zwolniło pamięć). <ort>na pewno </ort>jest inny sposób.

procedure TForm1.FreeHTTP;
var i: Integer;
begin
i:=0;
while i<componentcount do
begin
if components[i] is THTTPGet then
begin
components[i].Free;
dec(i);
end;
inc(i);
end;
end;

0

Było setki razy [sciana]

var
  i: Integer;
begin
  for i := ComponentCount - 1 downto 0 do
    if Components[i] is THTTPGet then
      Components[i].Free;

A sorki, nie doczytałem do końca :) Ale Twój sposób może być niepoprawny - odliczanie od dołu do góry, gdy indeksy mogą się zmieniać (jak zwalniasz to masz jeden komponent mniej i dojdziesz albo do Access Violation albo do ERangeError). Chyba to będzie najlepsze. Albo zrób sobie tablicę komponentów typu THTTPGet - po utworzeniu dodaj wskaźnik do tablicy i potem tylko przeglądaj tą tablicę, co powinno być znacznie efektywniejsze od przeglądania tablicy Components[].

0

Ok, dzięki, spróbuję z tablicami

0

dodaj wskaźnik do tablicy i potem tylko przeglądaj tą tablicę, co powinno być znacznie efektywniejsze od przeglądania tablicy Components[].

Wiesz.. tak naprawde są to wskaźniki do tych obiektów - Delphi posiada niejawną dereferencję - między innymi właśnie tu.

0

dodaj wskaźnik do tablicy i potem tylko przeglądaj tą tablicę, co powinno być znacznie efektywniejsze od przeglądania tablicy Components[].

Wiesz.. tak naprawde są to wskaźniki do tych obiektów - Delphi posiada niejawną dereferencję - między innymi właśnie tu.

Wiem, ale:

  1. Jest to (chyba) właściwość - co wiąże się z możliwością wykonania metody Get zamiast odczytu tablicy.
  2. Do swojej tablicy zapisuje komponenty tylko te, które go interesują, a właściwość Components[] zawiera wszystkie, więc będzie większa (tablica), a co to znaczy przy liniowym przeszukiwaniu, to wiadomo.
0
  1. Do swojej tablicy zapisuje komponenty tylko te, które go interesują, a właściwość Components[] zawiera wszystkie, więc będzie większa (tablica), a co to znaczy przy liniowym przeszukiwaniu, to wiadomo.

Szczególnie że jest zwalniane milion obiektów co ćwierć sekundy. ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1