Конференция "KOL" » Много ли ресурсов потребляет невидимая форма? [Delphi, Windows]
 
  • <> (19.04.08 12:06) [0]
    В программе главная форма создаётся автоматически, что бы её убрать используется Form.Hide. Имеет ли смысл переделать программу так, что бы когда нужно форма создавалась, а когда она не нужна - уничтожалась? Сэкономит ли это системные ресурсы?
  • Demt (19.04.08 20:24) [1]
    При уничтожении главной формы завершится приложение. Не заметил, что скрытая форма "кушает" ресурсы.
  • <> (19.04.08 21:30) [2]
    >При уничтожении главной формы завершится приложение.

    Нет, я имел ввиду динамическое создание формы в dpr файле, что бы приложение работало в фоне, и при необходимости форма создавалась\уничтожалась, примерно так:

    program Project1;
    uses   Windows,   Messages, kol;

    var  Form1:pControl; B1:pControl;

    Procedure cl( Sender: PObj ) ;
    begin
     beep(500,500);
    end;

    var   Wc: TWndClassEx;
         Msg: TMsg;

    function WndProc( wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM ): lResult; stdcall;
    begin

    if Msg = WM_DESTROY
     then
      begin
       PostQuitMessage( 0 );
       Result:= 0;
      end
     else
       Result:= DefWindowProc(wnd, Msg, wParam, lParam);

    end;

    begin
    Form1:=NewForm(Applet, 'Form1');
    Form1.Height:=100;
    Form1.Width:=100;
    B1:=NewButton(Form1,'b1');
    B1.Top:=20;
    B1.Left:=20;
    B1.OnClick:=TOnEvent(MakeMethod( nil, @Cl ) );
    Form1.caption:='fff';
    Run(Form1);

    with Wc do
     begin
      Style:= CS_VREDRAW or CS_HREDRAW;
      hIcon:= LoadIcon( 0, IDI_APPLICATION );
      hIconSm:= LoadIcon( 0, IDI_APPLICATION );
      hCursor:= LoadCursor( 0, IDC_ARROW );
      hInstance:= hInstance;
      cbSize:= SizeOf( WndClassEx );
      cbClsExtra:= 0;
      cbWndExtra:= 0;
      hbrBackground:= HBRUSH( COLOR_BACKGROUND );
      lpszMenuName:= nil;
      lpfnWndProc:= @WndProc;
     end;

    While GetMessage( Msg, 0, 0, 0 )
     do
      begin
       TranslateMessage( Msg );
       DispatchMessage( Msg );
      end;

    Halt( Msg.wParam );

    end.



    >Не заметил, что скрытая форма "кушает" ресурсы.

    Хотелось бы знать цифры.
  • Дмитрий К © (19.04.08 22:26) [3]

    > <>   (19.04.08 21:30) [2]

    А где тут динамическое создание формы?
  • <> (19.04.08 22:38) [4]
    >А где тут динамическое создание формы?

    Вот здесь:


    begin
    Form1:=NewForm(Applet, 'Form1');
    Form1.Height:=100;
    Form1.Width:=100;
    B1:=NewButton(Form1,'b1');
    B1.Top:=20;
    B1.Left:=20;
    B1.OnClick:=TOnEvent(MakeMethod( nil, @Cl ) );
    Form1.caption:='fff';
    Run(Form1);

  • Ёжик (19.04.08 22:50) [5]
    Позвольте поинтересоваться, с каких "позиций" Вас интересует потребление ресурсов, как я понял из поста системных? У Вас какой компьютер (конфигурация), и в чем основная проблема?
  • <> (19.04.08 23:36) [6]
    >Позвольте поинтересоваться, с каких "позиций" Вас интересует потребление ресурсов, как я понял из поста системных? У Вас какой компьютер (конфигурация), и в чем основная проблема?

    Конфигурация - D-800/128MB RAM/20GB HDD.

    Меня это интересует пока теоретически, но если разница в потреблении ресурсов будет велика-то и практически.
  • Vladimir Kladov (20.04.08 08:10) [7]
    Форму имеет смысл уничтожать только в случае, если её первичная настройка при показе, в начале диалога, настолько запутанная, что проще её пересоздать, чем учесть все хвосты от предыдущего состояния. Такое бывает, если внешний вид формы зависит от операции/функции, для которой она вызвана, а функций этих не меньше десятка (или хотя бы 5). В плане потребления ресурсов - это бессмысленно, если у вас не более 1000 разных форм. Не работающий код просто ляжет на своп, ограничения по ресурсам user/kernel/gdi (окна, дескрипторы таймеров, картинок и т.п.) в NT практически отсутствуют, в довольно широких пределах.
  • <> (20.04.08 11:35) [8]
    Спасибо!
 
Конференция "KOL" » Много ли ресурсов потребляет невидимая форма? [Delphi, Windows]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]