O dynamicznych formach

0

WItam.

I. Zauważyłem taką rzecz:

procedure TForm1.Button1Click(Sender: TObject);
var
  f: tform2;
  I: integer;
begin
  for I := 0 to 35 do
  begin
  f := tform2.Create(Application);
  f.Show;
  f.Close;
  end;

end;

Nie ma tu wycieku pamieci (wstawiłem przed kreowaniem aplikacji kod :

ReportMemoryLeaksOnShutdown := true;

Gdy za ownera postawi sie nil, to wyskakuje info o wycieku. W tworzonej formie nie obsluguje akcji caFree w OnClose.

Czy wszystko bedzie dobrze, gdy tak zostawie ? Bo wycieku nie widze, zwalnia sie wraz z MainFormem. Czy inne tworzone dynamiczne komponenty tez sie zwalniaja tak ?

II. Dlaczego exe tak duzo mniej 'wazy' gdy wylaczy sie autokreowanie form ? W przypadku parenastu formatek, rozmiar zmniejszyl sie o 0.5 MB. Pewnie odchodzi pare instrukcji w inicjalizacji, ale bez przesady zeby az o tyle sie zmniejszal ;-P

III. Czy jesli stawiamy komponent wizualny, to da sie zrobic zeby nie kreowal sie na starcie programu ? Tylko recznie, np na click buttona. Bo mam glowna forme, i wniej 3 dosc obfite TabPagery, gdzie w danej chwili tylko jeden jest widoczny(wiec szkoda zasobow na pozostale 2). Wole uzywac TabPagerow, niz osobne formy...

0

generalnie prawie wszystko da się przenieść do dll, tylko tak jak kiedyś przy obj-ach w turbo pascalu warto się zastanowić "po co to do cholery robię?!" :)

0
TForm1 napisał(a)

WItam.

I. Zauważyłem taką rzecz:

procedure TForm1.Button1Click(Sender: TObject);
var
  f: tform2;
  I: integer;
begin
  for I := 0 to 35 do
  begin
  f := tform2.Create(Application);
  f.Show;
  f.Close;
  end;

end;

Nie ma tu wycieku pamieci (wstawiłem przed kreowaniem aplikacji kod :

ReportMemoryLeaksOnShutdown := true;

Gdy za ownera postawi sie nil, to wyskakuje info o wycieku. W tworzonej formie nie obsluguje akcji caFree w OnClose.

Czy wszystko bedzie dobrze, gdy tak zostawie ? Bo wycieku nie widze, zwalnia sie wraz z MainFormem. Czy inne tworzone dynamiczne komponenty tez sie zwalniaja tak ?

nie będzie OK bo forma zajmuje pamięć cały czas aż do zamknięcia aplikacji, nieważne czy okienko było otwarte sekundę czy godzinę. Co więcej jeśli to okno można otworzyć np. 100 razy to będziesz miał w pamięci 100 tych form aż do zamknięcia programu. To samo dotyczy komponentów dynamicznych

II. Dlaczego exe tak duzo mniej 'wazy' gdy wylaczy sie autokreowanie form ? W przypadku parenastu formatek, rozmiar zmniejszyl sie o 0.5 MB. Pewnie odchodzi pare instrukcji w inicjalizacji, ale bez przesady zeby az o tyle sie zmniejszal ;-P
nie zauważyłem tego u siebie

III. Czy jesli stawiamy komponent wizualny, to da sie zrobic zeby nie kreowal sie na starcie programu ? Tylko recznie, np na click buttona. Bo mam glowna forme, i wniej 3 dosc obfite TabPagery, gdzie w danej chwili tylko jeden jest widoczny(wiec szkoda zasobow na pozostale 2). Wole uzywac TabPagerow, niz osobne formy...

jeśli dodajesz coś poczas projektowania aplikacji to jest to tworzone przy tworzeniu formy, na której to leży i nie da się tego zmienić. Możesz co najwyżej tworzyć to ręcznie - np. GExpert potrafi po zaznaczeniu komponentu wygenerować kod do tworzenia ręcznego

0

dzieki, faktycznie zapomnialem o tym ze bedzie blokowac pamiec az dopoki sie nie zamknie program.

Co do rozmiaru przy wylaczonym CreateForm, to tak jest w D2009, nawet przy pustym projekcie-2 unity i rozmiar sie rozni o okolo 100kB

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