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

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

19.10.2023, 13:27. Показов 1535. Ответов 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
10299 / 5722 / 1268
Регистрация: 12.03.2015
Сообщений: 26,497
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,150
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru