Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Забивается оперативка / 25 сообщений из 26, страница 1 из 2
24.10.2017, 22:02:18
    #39541335
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Две формы
Первая

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
unit Unit5;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, sButton;

type
  TForm5 = class(TForm)
    sButton1: TsButton;
    procedure sButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

uses
  Unit1;

procedure TForm5.sButton1Click(Sender: TObject);
begin
  if sButton1.Tag = 0 then
  begin
    Form1 := TForm1.Create(Application);
    Form1.Show;
    sButton1.Tag := 1;
  end else
  begin
    sButton1.Tag := 0;
    Form1.Free;
  end;
end;

end.




вторая

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, sPanel;

type
  TForm1 = class(TForm)
    Panel: TsPanel;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT and (not WS_EX_APPWINDOW));
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_HWNDPARENT, GetDesktopWindow);
  SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);
end;

end.




У второй формы:
Align = alClient
AlphaBlend = true
AlphaBlend = 200
Color = clBlack
TransparentColor = true
TransparentColorValue = clFuchsia

На второй форме лежит панель:
Color = clFuchsia
BevelOuter = bvNone

Из первой формы нажимаю по кнопке несколько раз и вижу как забивается оперативка
...
Рейтинг: 0 / 0
24.10.2017, 22:04:41
    #39541336
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
А какой именно процесс забивает оперативку - без понятия. Точно не моя программа.
...
Рейтинг: 0 / 0
24.10.2017, 22:11:44
    #39541338
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Похоже процесс: Диспетчер окон рабочего стола
...
Рейтинг: 0 / 0
24.10.2017, 22:37:33
    #39541348
Freedoom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Miracle9...Точно не моя программа.
1. dpr в студию
2. Для проверки убрать обработчи Form1
3. Убедиться в правильности использования глобальной переменной Form1 в первой форме
Form1 := TForm1.Create(Application);
...
Рейтинг: 0 / 0
24.10.2017, 22:42:20
    #39541350
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
FreedoomMiracle9...Точно не моя программа.
1. dpr в студию
2. Для проверки убрать обработчи Form1
3. Убедиться в правильности использования глобальной переменной Form1 в первой форме
Form1 := TForm1.Create(Application);

"1. dpr в студию"
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
program Project3;

uses
  Vcl.Forms,
  Unit5 in 'Unit5.pas' {Form5},
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm5, Form5);
  Application.Run;
end.
...
Рейтинг: 0 / 0
24.10.2017, 22:48:49
    #39541351
Freedoom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Miracle9, по п. 1 - Ок Form1 автоматически не создаётся. Осталось проверить остальное. Для гарантии блокировки повторного использования Form1 предлагаю сравнивать Form1 <> nil, а после Form1.Free добавить Form1 := nil
...
Рейтинг: 0 / 0
24.10.2017, 23:13:43
    #39541355
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Freedoomа после Form1.Free добавить Form1 := nil
FreeAndNil всеж короче будет
...
Рейтинг: 0 / 0
24.10.2017, 23:20:38
    #39541356
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
FreedoomMiracle9, по п. 1 - Ок Form1 автоматически не создаётся. Осталось проверить остальное. Для гарантии блокировки повторного использования Form1 предлагаю сравнивать Form1 <> nil, а после Form1.Free добавить Form1 := nil
Сделал
первая форма

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
unit Unit5;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, sButton;

type
  TForm5 = class(TForm)
    sButton1: TsButton;
    procedure sButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

uses
  Unit1;

procedure TForm5.sButton1Click(Sender: TObject);
begin
  if sButton1.Tag = 0 then
  begin
    if (Form1 = nil) then
    begin
      Form1 := TForm1.Create(Application);
      Form1.Show;
      sButton1.Tag := 1;
      Self.Caption := Self.Caption + '1';
    end;
  end else
  begin
    sButton1.Tag := 0;
    Form1.Free;
    Form1 := nil;
  end;
end;

end.




все ровно грузиться
...
Рейтинг: 0 / 0
24.10.2017, 23:40:13
    #39541360
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Miracle9А какой именно процесс забивает оперативку - без понятия. Точно не моя программа.
Что за ерунда...
Диспетчер задач в разрезе процессов показывает кто сколько съел, при чем как физической, так и виртуальной и рабочей...
Монитор ресурсов показывает тоже самое
...
Рейтинг: 0 / 0
24.10.2017, 23:52:29
    #39541363
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
P.S. В MSDN
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms633591(v=vs.85).aspx
авторYou must not call SetWindowLong with the GWL_HWNDPARENT index to change the parent of a child window. Instead, use the SetParent function.
т.к. она нигде не документирована, хотя и используется повсеместно самим майкрософтом.. но вдруг там чего еще нужно указывать..
...
Рейтинг: 0 / 0
25.10.2017, 00:03:15
    #39541364
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Поменял
Код: pascal
1.
SetWindowLong(Handle, GWL_HWNDPARENT, GetDesktopWindow);


Все ровно грузиться.
...
Рейтинг: 0 / 0
25.10.2017, 00:04:30
    #39541365
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Не то написал
заменил на
Код: pascal
1.
Winapi.Windows.SetParent(Handle, GetDesktopWindow);


Продолжает грузить.
...
Рейтинг: 0 / 0
25.10.2017, 00:10:49
    #39541366
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Нашёл в чём прикол:
У первой формы ставим TransparentColor = false и всё начинает работать нормально.
Версия делфи Delphi 10.1 Berlin
...
Рейтинг: 0 / 0
25.10.2017, 00:16:38
    #39541367
Freedoom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
ДокFreeAndNil всеж короче будет
Да, но это вызов процедуры - небольшая потеря производительности. Когда присал про проверку Form1 на nil, подразумевал, следующую конструкцию:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
if Assigned(Form1) then begin
  Form1.Free; Form1 := nil;
end
else begin
  Form1 := TForm1.Create(Application);
  Form1.Show
end;



Miracle9 все ровно грузиться
Выполнить п.2 - убрать обработчики для TForm1 FormCreate и FormShow
В FormCreate, в отличии от FormShow, Handle может быть ещё не определён. Проверь скобки в GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT and (not WS_EX_APPWINDOW) В таком варианте выполняется
1 not
2 and
3 or
С учётом значений констант WS_EX* получится GetWindowLong() or WS_EX_TRANSPARENT
...
Рейтинг: 0 / 0
25.10.2017, 00:20:29
    #39541370
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Freedoom,

какая еще "производительность" в месте, где создаются/убиваются формы.
...
Рейтинг: 0 / 0
25.10.2017, 00:26:25
    #39541372
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
FreedoomДокFreeAndNil всеж короче будет
Да, но это вызов процедуры - небольшая потеря производительности
Вы издеваетесь? Она же inline
Код: pascal
1.
procedure FreeAndNil(var Obj); inline;
...
Рейтинг: 0 / 0
25.10.2017, 00:30:50
    #39541373
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Вообще всё убрал из Form1
убрал FormCreate и FormShow.
Все ровно грузит.
В TransparentColor у Form1 ставлю true грузит ставлю false не грузит
...
Рейтинг: 0 / 0
25.10.2017, 00:32:40
    #39541374
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
авторВ FormCreate, в отличии от FormShow, Handle может быть ещё не определён.
Он определен в любом месте при обращении к Handle. Там Lazy Initialization
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TWinControl.HandleNeeded;
begin
  if WindowHandle = 0 then
  begin
    if Parent <> nil then Parent.HandleNeeded;
    CreateHandle;
  end;
end;

function TWinControl.GetHandle: HWND;
begin
  HandleNeeded;
  Result := WindowHandle;
end;



+ FormCreate вызывается уже в AfterConstruction (Если вы не мазохист с флагом OldCreateOrder) т.е. все конструкторы уже отработали, чему там еще инициализироваться...
...
Рейтинг: 0 / 0
25.10.2017, 00:41:45
    #39541375
Freedoom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
X-Cite, каюсь - отстал от последних версий
...
Рейтинг: 0 / 0
25.10.2017, 00:43:37
    #39541376
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Miracle9Вообще всё убрал из Form1
убрал FormCreate и FormShow.
Все ровно грузит.
В TransparentColor у Form1 ставлю true грузит ставлю false не грузит

TransparentColor всего лишь добавляет окну WS_EX_LAYERED и вызывает SetLayeredWindowAttributes
Больше там ничего нет.
...
Рейтинг: 0 / 0
25.10.2017, 07:07:42
    #39541404
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Miracle9Похоже процесс: Диспетчер окон рабочего стола
конечно DWM забивает, ты же указал прозрачность AlphaBlend = 200? кто-то же должен за неё "платить", так?

PS: уточнил бы что за винда, 7-ка?
...
Рейтинг: 0 / 0
25.10.2017, 12:31:14
    #39541605
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
kealon(Ruslan)Miracle9Похоже процесс: Диспетчер окон рабочего стола
конечно DWM забивает, ты же указал прозрачность AlphaBlend = 200? кто-то же должен за неё "платить", так?

PS: уточнил бы что за винда, 7-ка?

10ка (версия 1709)
...
Рейтинг: 0 / 0
25.10.2017, 12:38:20
    #39541616
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Miracle9,

второй день с ней сижу, она мне уже не нравится
что то там серьёзно поменяли в DWM
...
Рейтинг: 0 / 0
25.10.2017, 13:27:58
    #39541689
Miracle9
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
А знаете ещё в чём прикол, со временем, в Диспетчере Задач, этот процесс возвращается к 100мб (или даже меньше) занимаемой памяти, а общий процент занятой оперативки не снижается. А если закрыть какой нибудь файрфокс, то он снизиться (т.е.показатель % не заморожен).
...
Рейтинг: 0 / 0
25.10.2017, 14:01:19
    #39541738
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Забивается оперативка
Miracle9,

с нуля ставил систему или апдейтил?
по идее и фиг с ним сколько занимает DWM, это ж его проблемы
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Забивается оперативка / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]