С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2

Есть ли смысл в данной оптимизации

19.10.2023, 13:27. Показов 1525. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Заинтересовал один вопрос - есть обработчики событий разных компонент и в них динамически создаю объекты типа TStringList, TOpenDialog, TSaveDialog и присваиваю им необходимые свойства, например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    TStringList *sl = new TStringList;
    TSaveDialog *sd = new TSaveDialog(this);
 
    sl->Clear();
 
    sd->Filter = "Garmin GPX (*.gpx)|*gpx";
    sd->Options << ofOverwritePrompt;
    sd->DefaultExt = "gpx";
 
//   некий код
 
    delete sd;
    delete sl;
Есть ли смысл при первом запуске приложения создать эти объекты, использовать их в разных обработчиках, присваивая нужные свойства, потом уничтожать при закрытии приложения? Или лучше создавать-удалять в обработчиках?
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2023, 13:27
Ответы с готовыми решениями:

Есть ли смысл апгрейдить пк с данной материнской платой?
Здравствуйте. Скажите пожалуйста - если я планирую постепенно грейдить комп - есть ли смысл сперва просто докупить хорошую видеокарту и...

Решить задачу оптимизации, используя геометрический смысл.
Геометрическое решение F= x_1+x_2\rightarrow min \left\{\begin{matrix}2x1-x2\le 4,\\ x1-2x2\le 2,\\ x1-x2\le 5,\\ x1, x2\ge...

Оператор Goto - имеет ли смысл его использование для оптимизации?
Доброго времени суток. Имеется код - Цикл в цикле с проверками: Искомая таблица содержит около 15000 строк, таблица для поиска более...

5
Злостный нарушитель
 Аватар для Verevkin
10262 / 5686 / 1266
Регистрация: 12.03.2015
Сообщений: 26,368
19.10.2023, 13:41
Цитата Сообщение от TrollHammer Посмотреть сообщение
Есть ли смысл при первом запуске приложения создать эти объекты, использовать их в разных обработчиках, присваивая нужные свойства, потом уничтожать при закрытии приложения? Или лучше создавать-удалять в обработчиках?
Если обработчики вызываются тыщи раз в секунду, то да, многоразовые объекты немного ускорят выполнение. Иначе - проще и безопаснее использовать одноразовые локальные объекты, не забывая их удалять после использования.
2
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
19.10.2023, 16:29
Смысл только со TStringList, и то, как уже сказал Verevkin, если с этим объектом работаешь ну о-о-очень часто.
А вот к-либо визуальные компоненты, вроде диалогов - нет смысла вообще - реакция пользователя намного медленее чем вызов их конструкторов/деструкторов. Да и безопаснее использовать "одноразовые" - забудешь к-нить пропертю изменить и будешь потом искать сутками, а чё не так?
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
19.10.2023, 22:26
Вот накидал два примера

Пример 1(когда постоянно создаем динамически):
C++
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
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    DWORD t=GetTickCount();
 
    for(int i = 0; i < 10000000; i++)
        {
            TStringList *sl = new TStringList;
            TSaveDialog *sd = new TSaveDialog(this);
 
 
            sd->Filter = "Garmin GPX (*.gpx)|*gpx";
            sd->Options << ofOverwritePrompt;
            sd->DefaultExt = "gpx";
 
            sl->Add("текст1");
            sl->Add("текст2");
            sl->Add("текст3");
            sl->Add("текст4");
 
            delete sd;
            delete sl;
        }
 
    ShowMessage(GetTickCount()-t);
}
//---------------------------------------------------------------------
Результат: 10532



Пример 2(когда разово создаем и в конце удаляем, в промежутках чистим):
C++
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
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    DWORD t=GetTickCount();
 
    TStringList *sl = new TStringList;
    TSaveDialog *sd = new TSaveDialog(this);
 
    for(int i = 0; i < 10000000; i++)
        {
            sl->Clear();
 
            sd->Filter = "Garmin GPX (*.gpx)|*gpx";
            sd->Options << ofOverwritePrompt;
            sd->DefaultExt = "gpx";
 
            sl->Add("текст1");
            sl->Add("текст2");
            sl->Add("текст3");
            sl->Add("текст4");
        }
 
    delete sd;
    delete sl;
 
    ShowMessage(GetTickCount()-t);
}
//---------------------------------------------------------------------------
Результат: 3093

Вывод: Почти в 3,5 раза быстре (а если убрать из цикла настройки TSaveDialog, то все в 4 раза быстрее )
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
20.10.2023, 05:55
Ну TSaveDialog не просто так же создаётся, а для взаимодействия с юзером. Стоит, наверное воткнуть внутрь цикла отрисовку на экран этого диалога с последующим его закрытием (убираем время реакции пользователя) и смотрим на результат.

Т.к. отрисовка на экран будет самой длительной операцией, то и разница будет меньше. Лучше поработать только со TStringList - это даст более адекватный тест. И опять же - сколько обычных операций мы делаем с этим StringList`ом в теле цикла.
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
20.10.2023, 14:26  [ТС]
Цитата Сообщение от drfaust Посмотреть сообщение
Лучше поработать только со TStringList
Думал над этим, только в разных обработчиках в стринглист загружаются разные типы данных (строк), поэтому и создаю в каждом обработчике свой под разным именем, чтобы не запутаться и упростить поиск ошибки обработки данных (имя sl - это одно из)

Добавлено через 2 минуты
Сделал вывод, что лучше каждый раз создавать/задавать свойства/уничтожать объект проще в событии, меньше путаницы, а на современных компах на скорость выполнения приложения не влияет. Спасибо всем, кто отозвался по теме!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2023, 14:26
Помогаю со студенческими работами здесь

Смысл данной процедуры
Уважаемые форумчане, вновь понадобился ваш совет! Расскажите пожалуйста смысл действий, производимых в данной процедуры, написанной в...

В чем смысл данной программы
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;memory&gt; typedef struct str1 { float val; ...

Есть ли смысл устанавливать третью плашку, когда есть две, работающие в двух каналах?
День добрый! Можно ли расширять память третей плашкой ОП, если уже установлены две, работающие в двухканальном режиме. Будет ли от...

Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле?
Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле? Функции в одну строчку, сразу в ретарне вычисляет...

Найти есть ли в данной строке есть строка .pas
Дана строка D:\prog\work\pr.txt найти есть ли в данной строке есть строка .pas


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru