Как ускорить загрузку окна?
|
|
Vitamin | Дата: Четверг, 12.01.2023, 12:36 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| Если в окне находится большое количество гаджетов (больше 100), то загрузка такого окна начинает тормозить (долго отображается окно без элементов) на одноядерном процессоре до 4 сек. Что можно сделать для ускорения загрузки таких окон?
|
|
| |
haav | Дата: Четверг, 12.01.2023, 14:29 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Статус: Offline
| Подробнее пожалуйста: 1) какая система 2) минимально-возможный рабочий код
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Vitamin | Дата: Четверг, 12.01.2023, 18:43 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| На Win10x64 с 4-мя ядрами задержка незаметна, а вот на Win7x32 с 1-м ядром бросается в глаза. из кода убрал все лишнее, вот что осталосьКод #Include "window9.bi" #Define SetDisp GetCurrentSettingsDisplay #Define stilOkna WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU _ Or WS_MINIMIZEBOX Or WS_VISIBLE Or WS_TABSTOPENABLE Var hwnd = OpenWindow("",GetWidthDesktop(SetDisp)/2-328,GetHeightDesktop(SetDisp)/2-292,656,584,stilOkna) WindowBounds(hwnd,656,584,656,584) CheckBoxGadget(1,10,6,100,18,"Автозапуск") SetGadgetFont(1,CInt(LoadFont("arial",9))) CheckBoxGadget(2,240,6,220,18,"Не показывать значок в трее") SetGadgetFont(2,CInt(LoadFont("arial",9))) GroupGadget(6,6,24,552,160,"Список заданий") SetGadgetFont(6,CInt(LoadFont("arial",8))) ListBoxGadget(7,10,40,542,138,WS_VSCROLL Or WS_HSCROLL Or WS_BORDER) SetGadgetFont(7,CInt(LoadFont("arial",9))) CheckBoxGadget(11,564,198,82,18,"Включено") SetGadgetFont(11,CInt(LoadFont("arial",8))) GadgetToolTip(11,"Активация задания",211) SetGadgetFont(211,CInt(LoadFont("arial",8))) ButtonGadget(12,564,34,80,26,"Добавить") SetGadgetFont(12,CInt(LoadFont("arial",9))) GadgetToolTip(12,"Добавить новое задание",212) SetGadgetFont(212,CInt(LoadFont("arial",8))) ButtonGadget(13,564,64,80,26,"Удалить") SetGadgetFont(13,CInt(LoadFont("arial",9))) GadgetToolTip(13,"Удалить текущее задание",213) SetGadgetFont(213,CInt(LoadFont("arial",8))) ButtonGadget(15,564,94,80,26,"Вверх") SetGadgetFont(15,CInt(LoadFont("arial",9))) GadgetToolTip(15,"Переместить вверх по списку",215) SetGadgetFont(215,CInt(LoadFont("arial",8))) ButtonGadget(16,564,124,80,26,"Вниз") SetGadgetFont(16,CInt(LoadFont("arial",9))) GadgetToolTip(16,"Переместить вниз по списку",216) SetGadgetFont(216,CInt(LoadFont("arial",8))) ButtonGadget(17,564,154,80,26,"Выход") SetGadgetFont(17,CInt(LoadFont("arial",9))) GadgetToolTip(17,"Сохранить и выйти из настроек",217) SetGadgetFont(217,CInt(LoadFont("arial",8))) GroupGadget(19,6,184,552,42,"Название задания") SetGadgetFont(19,CInt(LoadFont("arial",8))) StringGadget(20,10,200,542,20,"",ES_AUTOHSCROLL,WS_EX_STATICEDGE) SetGadgetFont(20,CInt(LoadFont("arial",10))) GroupGadget(21,6,226,552,46,"Запускаемый файл") SetGadgetFont(21,CInt(LoadFont("arial",8))) StringGadget(22,10,244,542,20,"",ES_AUTOHSCROLL,WS_EX_STATICEDGE) SetGadgetFont(22,CInt(LoadFont("arial",9))) GadgetToolTip(22,"Командная строка, например: %Windir%\notepad или cmd",222) SetGadgetFont(222,CInt(LoadFont("arial",8))) ButtonGadget(23,564,238,36,26,"...") SetGadgetFont(23,CInt(LoadFont("arial",12))) GadgetToolTip(23,"Выбрать файл",223) SetGadgetFont(223,CInt(LoadFont("arial",8))) ButtonGadget(24,608,238,36,26,"Выкл") SetGadgetFont(24,CInt(LoadFont("arial",8))) GadgetToolTip(24,"Добавить команду выключения компьютера",224) SetGadgetFont(224,CInt(LoadFont("arial",8))) GroupGadget(26,6,272,638,64,"Параметры командной строки") SetGadgetFont(26,CInt(LoadFont("arial",8))) StringGadget(27,10,288,628,42,"текст",ES_MULTILINE Or ES_AUTOVSCROLL,WS_EX_STATICEDGE) SetGadgetFont(27,CInt(LoadFont("arial",10))) GadgetToolTip(27,"Для программ и скриптов, если с побелами - окавычиваем",227) SetGadgetFont(227,CInt(LoadFont("arial",8))) GroupGadget(31,6,336,280,38,"Тип запуска") SetGadgetFont(31,CInt(LoadFont("arial",8))) OptionGadget(32,12,350,62,20,"Время") SetGadgetFont(32,CInt(LoadFont("arial",8))) OptionGadget(33,82,350,64,20,"Таймер") SetGadgetFont(33,CInt(LoadFont("arial",8))) OptionGadget(34,152,350,56,20,"Цикл") SetGadgetFont(34,CInt(LoadFont("arial",8))) StringGadget(35,214,350,64,18,"00:00:00",ES_READONLY Or ES_CENTER,WS_EX_STATICEDGE) SetGadgetFont(35,LoadFont("Arial",9)) GadgetToolTip(35,"Установка времени",235) SetGadgetFont(235,CInt(LoadFont("arial",8))) GroupGadget(40,292,336,352,38,"Параметры окна") SetGadgetFont(40,CInt(LoadFont("arial",8))) OptionGadget(41,286+12,350,74,20,"Обычное") SetGadgetFont(41,CInt(LoadFont("arial",8))) OptionGadget(42,286+94,350,68,20,"Скрыто") SetGadgetFont(42,CInt(LoadFont("arial",8))) OptionGadget(43,286+176,350,78,20,"Свёрнуто") SetGadgetFont(43,CInt(LoadFont("arial",8))) OptionGadget(44,286+260,350,88,20,"Весь экран") SetGadgetFont(44,CInt(LoadFont("arial",8))) GroupGadget(60,6,374,396,40,"Дни недели") SetGadgetFont(60,CInt(LoadFont("arial",8))) CheckBoxGadget(61,14,390,46,16,"Вкл.") SetGadgetFont(61,CInt(LoadFont("arial",8))) GadgetToolTip(61,"С учётом/без дней недели",261) SetGadgetFont(261,CInt(LoadFont("arial",8))) CheckBoxGadget(62,70,390,38,16,"Пн") SetGadgetFont(62,CInt(LoadFont("arial",8))) GadgetToolTip(62,"Понедельник",262) SetGadgetFont(262,CInt(LoadFont("arial",8))) CheckBoxGadget(63,118,390,38,16,"Вт") SetGadgetFont(63,CInt(LoadFont("arial",8))) GadgetToolTip(63,"Вторник",263) SetGadgetFont(263,CInt(LoadFont("arial",8))) CheckBoxGadget(64,166,390,38,16,"Ср") SetGadgetFont(64,CInt(LoadFont("arial",8))) GadgetToolTip(64,"Среда",264) SetGadgetFont(264,CInt(LoadFont("arial",8))) CheckBoxGadget(65,214,390,38,16,"Чт") SetGadgetFont(65,CInt(LoadFont("arial",8))) GadgetToolTip(65,"Четверг",265) SetGadgetFont(265,CInt(LoadFont("arial",8))) CheckBoxGadget(66,262,390,38,16,"Пт") SetGadgetFont(66,CInt(LoadFont("arial",8))) GadgetToolTip(66,"Пятница",266) SetGadgetFont(266,CInt(LoadFont("arial",8))) CheckBoxGadget(67,310,390,38,16,"Сб") SetGadgetFont(67,CInt(LoadFont("arial",8))) GadgetToolTip(67,"Суббота",267) SetGadgetFont(267,CInt(LoadFont("arial",8))) CheckBoxGadget(68,356,390,38,16,"Вс") SetGadgetFont(68,CInt(LoadFont("arial",8))) GadgetToolTip(68,"Воскресенье",268) SetGadgetFont(268,CInt(LoadFont("arial",8))) GroupGadget(50,408,374,236,40,"Период действия") SetGadgetFont(50,CInt(LoadFont("arial",8))) CheckBoxGadget(51,416,390,46,16,"Вкл.") SetGadgetFont(51,CInt(LoadFont("arial",8))) GadgetToolTip(51,"Временной диапазон срабатывания",251) SetGadgetFont(251,CInt(LoadFont("arial",8))) StringGadget(52,482,390,64,18,"00:00:00",ES_READONLY Or ES_CENTER,WS_EX_STATICEDGE) SetGadgetFont(52,LoadFont("Arial",9)) GadgetToolTip(52,"Установка времени",252) SetGadgetFont(252,CInt(LoadFont("arial",8))) StringGadget(53,570,390,64,18,"00:00:00",ES_READONLY Or ES_CENTER,WS_EX_STATICEDGE) SetGadgetFont(53,LoadFont("Arial",9)) GadgetToolTip(53,"Установка времени",253) SetGadgetFont(253,CInt(LoadFont("arial",8))) TextGadget(54,555,388,14,14,"-") SetGadgetFont(54,LoadFont("Arial",12)) GroupGadget(105,6,414,638,56,"Число") SetGadgetFont(105,CInt(LoadFont("arial",8))) CheckBoxGadget(70,14,430,38,16,"Вкл.") SetGadgetFont(70,CInt(LoadFont("arial",8))) GadgetToolTip(70,"С учётом/без чисел мясяца",270) SetGadgetFont(270,CInt(LoadFont("arial",8))) CheckBoxGadget(71,60,430,34,16,"1") SetGadgetFont(71,CInt(LoadFont("arial",7))) CheckBoxGadget(72,100,430,34,16,"2") SetGadgetFont(72,CInt(LoadFont("arial",7))) CheckBoxGadget(73,136,430,34,16,"3") SetGadgetFont(73,CInt(LoadFont("arial",7))) CheckBoxGadget(74,172,430,34,16,"4") SetGadgetFont(74,CInt(LoadFont("arial",7))) CheckBoxGadget(75,208,430,34,16,"5") SetGadgetFont(75,CInt(LoadFont("arial",7))) CheckBoxGadget(76,244,430,34,16,"6") SetGadgetFont(76,CInt(LoadFont("arial",7))) CheckBoxGadget(77,280,430,34,16,"7") SetGadgetFont(77,CInt(LoadFont("arial",7))) CheckBoxGadget(78,316,430,34,16,"8") SetGadgetFont(78,CInt(LoadFont("arial",7))) CheckBoxGadget(79,352,430,34,16,"9") SetGadgetFont(79,CInt(LoadFont("arial",7))) CheckBoxGadget(80,388,430,34,16,"10") SetGadgetFont(80,CInt(LoadFont("arial",7))) CheckBoxGadget(81,424,430,34,16,"11") SetGadgetFont(81,CInt(LoadFont("arial",7))) CheckBoxGadget(82,460,430,34,16,"12") SetGadgetFont(82,CInt(LoadFont("arial",7))) CheckBoxGadget(83,496,430,34,16,"13") SetGadgetFont(83,CInt(LoadFont("arial",7))) CheckBoxGadget(84,532,430,34,16,"14") SetGadgetFont(84,CInt(LoadFont("arial",7))) CheckBoxGadget(85,568,430,34,16,"15") SetGadgetFont(85,CInt(LoadFont("arial",7))) CheckBoxGadget(86,60,448,34,16,"16") SetGadgetFont(86,CInt(LoadFont("arial",7))) CheckBoxGadget(87,100,448,34,16,"17") SetGadgetFont(87,CInt(LoadFont("arial",7))) CheckBoxGadget(88,136,448,34,16,"18") SetGadgetFont(88,CInt(LoadFont("arial",7))) CheckBoxGadget(89,172,448,34,16,"19") SetGadgetFont(89,CInt(LoadFont("arial",7))) CheckBoxGadget(90,208,448,34,16,"20") SetGadgetFont(90,CInt(LoadFont("arial",7))) CheckBoxGadget(91,244,448,34,16,"21") SetGadgetFont(91,CInt(LoadFont("arial",7))) CheckBoxGadget(92,280,448,34,16,"22") SetGadgetFont(92,CInt(LoadFont("arial",7))) CheckBoxGadget(93,316,448,34,16,"23") SetGadgetFont(93,CInt(LoadFont("arial",7))) CheckBoxGadget(94,352,448,34,16,"24") SetGadgetFont(94,CInt(LoadFont("arial",7))) CheckBoxGadget(95,388,448,34,16,"25") SetGadgetFont(95,CInt(LoadFont("arial",7))) CheckBoxGadget(96,424,448,34,16,"26") SetGadgetFont(96,CInt(LoadFont("arial",7))) CheckBoxGadget(97,460,448,34,16,"27") SetGadgetFont(97,CInt(LoadFont("arial",7))) CheckBoxGadget(98,496,448,34,16,"28") SetGadgetFont(98,CInt(LoadFont("arial",7))) CheckBoxGadget(99,532,448,34,16,"29") SetGadgetFont(99,CInt(LoadFont("arial",7))) CheckBoxGadget(100,568,448,34,16,"30") SetGadgetFont(100,CInt(LoadFont("arial",7))) CheckBoxGadget(101,604,448,34,16,"31") SetGadgetFont(101,CInt(LoadFont("arial",7))) ButtonGadget(102,618,429,15,15,"^") SetGadgetFont(102,CInt(LoadFont("arial",8))) GadgetToolTip(102,"вкл/выкл все",302) SetGadgetFont(302,CInt(LoadFont("arial",8))) GroupGadget(110,6,470,638,40,"Месяц") SetGadgetFont(110,CInt(LoadFont("arial",8))) CheckBoxGadget(111,14,486,46,16,"Вкл.") SetGadgetFont(111,CInt(LoadFont("arial",8))) GadgetToolTip(111,"С учётом/без месяцев",311) SetGadgetFont(311,CInt(LoadFont("arial",8))) ButtonGadget(112,618,486,15,15,"^") SetGadgetFont(112,CInt(LoadFont("arial",8))) GadgetToolTip(112,"вкл/выкл все",312) SetGadgetFont(312,CInt(LoadFont("arial",8))) CheckBoxGadget(113,80,486,34,16,"1") SetGadgetFont(113,CInt(LoadFont("arial",8))) GadgetToolTip(113,"Январь",313) SetGadgetFont(313,CInt(LoadFont("arial",8))) CheckBoxGadget(114,124,486,34,16,"2") SetGadgetFont(114,CInt(LoadFont("arial",8))) GadgetToolTip(114,"Февраль",314) SetGadgetFont(314,CInt(LoadFont("arial",8))) CheckBoxGadget(115,168,486,34,16,"3") SetGadgetFont(115,CInt(LoadFont("arial",8))) GadgetToolTip(115,"Март",315) SetGadgetFont(315,CInt(LoadFont("arial",8))) CheckBoxGadget(116,212,486,34,16,"4") SetGadgetFont(116,CInt(LoadFont("arial",8))) GadgetToolTip(116,"Апрель",316) SetGadgetFont(316,CInt(LoadFont("arial",8))) CheckBoxGadget(117,256,486,34,16,"5") SetGadgetFont(117,CInt(LoadFont("arial",8))) GadgetToolTip(117,"Май",317) SetGadgetFont(317,CInt(LoadFont("arial",8))) CheckBoxGadget(118,300,486,34,16,"6") SetGadgetFont(118,CInt(LoadFont("arial",8))) GadgetToolTip(118,"Июнь",318) SetGadgetFont(318,CInt(LoadFont("arial",8))) CheckBoxGadget(119,344,486,34,16,"7") SetGadgetFont(119,CInt(LoadFont("arial",8))) GadgetToolTip(119,"Июль",319) SetGadgetFont(319,CInt(LoadFont("arial",8))) CheckBoxGadget(120,388,486,34,16,"8") SetGadgetFont(120,CInt(LoadFont("arial",8))) GadgetToolTip(120,"Август",320) SetGadgetFont(320,CInt(LoadFont("arial",8))) CheckBoxGadget(121,432,486,34,16,"9") SetGadgetFont(121,CInt(LoadFont("arial",8))) GadgetToolTip(121,"Сентябрь",321) SetGadgetFont(321,CInt(LoadFont("arial",8))) CheckBoxGadget(122,476,486,34,16,"10") SetGadgetFont(122,CInt(LoadFont("arial",8))) GadgetToolTip(122,"Октябрь",322) SetGadgetFont(322,CInt(LoadFont("arial",8))) CheckBoxGadget(123,520,486,34,16,"11") SetGadgetFont(123,CInt(LoadFont("arial",8))) GadgetToolTip(123,"Ноябрь",323) SetGadgetFont(323,CInt(LoadFont("arial",8))) CheckBoxGadget(124,564,486,34,16,"12") SetGadgetFont(124,CInt(LoadFont("arial",8))) GadgetToolTip(124,"Декабрь",324) SetGadgetFont(324,CInt(LoadFont("arial",8))) GroupGadget(130,6,510,638,40,"Год") SetGadgetFont(130,CInt(LoadFont("arial",8))) CheckBoxGadget(131,14,526,46,16,"Вкл.") SetGadgetFont(131,CInt(LoadFont("arial",8))) GadgetToolTip(131,"С учётом/без годов",331) SetGadgetFont(331,CInt(LoadFont("arial",8))) StringGadget(132,70,523,528,20,"",ES_AUTOHSCROLL,WS_EX_STATICEDGE) SetGadgetFont(132,CInt(LoadFont("arial",10))) GadgetToolTip(132,"например: 2000, 2002-2005",332) SetGadgetFont(332,CInt(LoadFont("arial",8))) ButtonGadget(133,610,522,22,22,"+") SetGadgetFont(133,CInt(LoadFont("arial",10))) GadgetToolTip(133,"Добавить очередной год",333) SetGadgetFont(333,CInt(LoadFont("arial",8)))
Do Var event = WaitEvent() Select Case event Case EventClose : End End Select Loop
Вот как это выглядит: анимашка
|
|
| |
haav | Дата: Четверг, 12.01.2023, 20:32 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Статус: Offline
| Я даже не знаю , что посоветовать. Я загрузил программу на виртуалке под XP с одним ядром. Предел загрузки 30% , а это от моего процессора примерно 1000мгц , даже меньше. Памяти выставил 2гб. При таких данных хрюша загружается с тормозами и проводник подтупливает немного. Но твоя программа запускается в клик (никакой задержки не увидел). Я уже не знаю как еще тестировать.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Vitamin | Дата: Четверг, 12.01.2023, 20:53 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| Я тоже на виртуалке тестировал, видать ещё от проца многое зависит. У меня была мысль часть гаджетов (подсказки) подгружать отдельным потоком, после активации основных, однако так не получилось. Вообще такое возможно?
Сообщение отредактировал Vitamin - Четверг, 12.01.2023, 20:55 |
|
| |
haav | Дата: Четверг, 12.01.2023, 22:16 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Статус: Offline
| Цитата Vitamin ( ) У меня была мысль часть гаджетов (подсказки) подгружать отдельным потоком, после активации основных, однако так не получилось. Вообще такое возможно?
Я как-то очень давно пробовал использовать библиотеку (а именно GUI) из разных потоков , ничего хорошего из этого не вышло. Смутно помню , что какие-то сообщения приходили , а какие-то нет. В общем не рекомендую.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ntvgjhfnj | Дата: Пятница, 13.01.2023, 16:50 | Сообщение # 7 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| А зачем так много подгрузок шрифтов ? Что нельзя один раз загрузить так или кэшировать как, чисто непонятка.
polopok
|
|
| |
haav | Дата: Пятница, 13.01.2023, 17:04 | Сообщение # 8 |
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Статус: Offline
| Цитата ntvgjhfnj ( ) А зачем так много подгрузок шрифтов ? Что нельзя один раз загрузить так или кэшировать как, чисто непонятка.
Кстати да , молодец , что заметил. Я это просмотрел.
@Vitamin Загрузи шрифт один раз и потом только передавай в SetGadgetFont его хендл. Или сколько их там у тебя (штук 5 наверное). Просто вначале программы загрузи их и потом только передавай.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Vitamin | Дата: Пятница, 13.01.2023, 18:31 | Сообщение # 9 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| Цитата А зачем так много подгрузок шрифтов ? Что нельзя ... Цитата Загрузи шрифт один раз и потом только передавай в SetGadgetFont его хендл. Спасибо за подсказку, а то я копипастил бездумно
|
|
| |
zamabuvaraeu | Дата: Суббота, 14.01.2023, 11:00 | Сообщение # 10 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Код CheckBoxGadget(11,564,198,82,18,"Включено") SetGadgetFont(11,CInt(LoadFont("arial",8))) GadgetToolTip(11,"Активация задания",211) SetGadgetFont(211,CInt(LoadFont("arial",8)))
Сначала идёт создание Gadget № 11, а шрифт устанавливается для какого‐то другого Gadget, под номером 211. Если это ошибка — исправляйте. Такого в коде полно.
|
|
| |
Vitamin | Дата: Суббота, 14.01.2023, 18:09 | Сообщение # 11 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: Offline
| zamabuvaraeu, Цитата шрифт устанавливается для какого‐то другого Gadget, под номером 211 там всё правильно: создаётся гаджет-подсказка GadgetToolTip(,,211), у него идентификатор находится вконце, ну а затем для этой подсказки устанавливается шрифт
|
|
| |
|