С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11

Изменение размера вектора векторов занимает много времени при первом запуске ОС

18.03.2024, 02:23. Показов 3948. Ответов 30

Студворк — интернет-сервис помощи студентам
Здравствуйте. Для представления последовательности изображений я использую вектор объектов своего класса, одним из атрибутов которых является другой вектор. По сути - вектор векторов.
При первом запуске программы изменение размерности каждого элемента вектора (изменение количества пикселей в каждом изображении) занимает много времени. Однако, при последующих запусках программы времени на это уходит гораздо меньше и так будет вплоть до перезапуска ОС.
Использую Ubuntu 20.04, Qt, пробовал изменение размера через resize, застолбить память через reserve и добавлять элементы через emplace_back, ничего не помогло.
В чём может быть проблема?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2024, 02:23
Ответы с готовыми решениями:

Функция занимает много времени
Добрый день. Есть функция по уменьшению картинки: function image_resize( $source_path, $destination_path, $newwidth, ...

Процесс выполнения занимает много времени
Тройка Пифагора - три натуральных числа a < b < c, для которых выполняется равенство {a}^{2} + {b}^{2} = {c}^{2} Например, {3}^{2} +...

OpenXML, Dispose занимает, много времени
В программе происходит подключение к файлам несколько раз(около 60) using (var doc = WordprocessingDocument.Open(filePath_, true)) ...

30
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,021
18.03.2024, 07:46
Georgy van Ral, много = это сколько? Секунда? Минута?
Ну и как эти изображения хранятся, как загружаются?
Сомневаюсь, что дело в векторе

Добавлено через 41 секунду
в общем-то, вектор из уравнения можно убрать, использовать new[]/delete[]
0
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11
18.03.2024, 13:14  [ТС]
На буфер размером в 2000 изображений 1440х1080 для этой операции требуется 15 секунд.
Изображения записываются непосредственно с камеры.
Пример кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void MVLImageBuffer::ResizeAllElement(int new_size)
{
    pImageBuff.resize(1);
    (pImageBuff[0]).ImageResize(new_size);
    pImageBuff.reserve(size);
    int p = pImageBuff.capacity();
    //pImageBuff.resize(size);
    for (int i = 0; i < size-1; i++)
    {
        pImageBuff.emplace_back(pImageBuff[0]);
        //(pImageBuff[i+1]).ImageResize(new_size);
    }
}
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,021
18.03.2024, 13:27
Georgy van Ral, какой тип у pImageBuff ?

что-то странное происходит в данной функции. А что должно делаться ?
Почему бы тут просто не сделать
C++
1
2
3
4
void MVLImageBuffer::ResizeAllElement(int new_size)
{
   pImageBuff.resize(new_size);
}
0
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11
18.03.2024, 13:36  [ТС]
Вектор unsigned char.
Раньше так и было, но проблема была и в этом случае
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,021
18.03.2024, 14:01
если так и будешь партизанить, никто ничего не подскажет ))

Насколько я понимаю, требуется разом выделить память в районе 8 гигов. Столько озу реально есть на борту? Или там местный своп начинается (что там в линуксе, я не в курсе)

насколько быстро создаётся такой объект?
C++
1
std::vector<char> v(0x8p30);//8 гиг
0
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11
18.03.2024, 14:30  [ТС]
Не, максимальный вес итогового вектора выходит около 2.5 гиг.
Реальной озу 8 гиг, так как линукс на виртуальной машине.
C++
1
std::vector<char> v(0x8p30);//8 гиг
В первый запуск приложения на это потребовалось 20 с, а во все последующие всего 3,5 с
Да я не партизаню, просто первый раз задаю вопрос и не знаю, что может быть важно, а что нет))
0
Модератор
Эксперт Java
 Аватар для alecss131
2848 / 1356 / 404
Регистрация: 11.08.2017
Сообщений: 4,329
Записей в блоге: 2
18.03.2024, 16:09
1440*1080*2000 = 3110400000 или 2.9Гб и то это при условии что на каждый пиксель по 1 байту, если по 4 байта (rgba) то будет 11.6Гб, если по 3 то 8.7Гб
Только если картинки сжатые то будет меньше памяти, но тогда с ними будет невозможно работать.
0
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11
18.03.2024, 16:15  [ТС]
Проблема не в недостатке памяти, т. к. максимальный вес буфера я ограничиваю, читая из meminfo количество свободной памяти и оставляя запас в несколько гигов
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.03.2024, 16:19
Цитата Сообщение от Georgy van Ral Посмотреть сообщение
а буфер размером в 2000 изображений 1440х1080
Логичный вопрос. Зачем вам такой буфер ? Ума не приложу ...
0
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11
18.03.2024, 16:27  [ТС]
Для того, чтобы пользователь мог записать с камеры видеопоследовательность. На самом деле размер не такой большой, для камеры с высокой скоростью съёмки это всего секунд 10 видео
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.03.2024, 17:07
Цитата Сообщение от Georgy van Ral Посмотреть сообщение
Для того, чтобы пользователь мог записать с камеры видеопоследовательность.
И для этого нужно 2000 изображений ? Для одного фрейма видео ? Думаю нет.
Тогдв повторю вопрос :
Цитата Сообщение от SmallEvil Посмотреть сообщение
Зачем вам такой буфер ?
Добавлено через 2 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Или там местный своп начинается
Запрос такого объема памяти одним куском, скорее всего вызывает систему дефрагментации памяти.
Что и занимает время.
Потворный же запуск, должен быть почти мгновенен, не считая сбора данных с камеры.
0
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11
18.03.2024, 17:32  [ТС]
Такой размер необходим. Камеры будут фиксировать технологические операции, так что имеют высокую скорость съёмки. Так, при скорости съёмки 227 к/с в буфер на 2000 элементов попадёт менее 10 с процесса.
Естественно, чем больше будет вес отдельного изображения, тем меньше будет максимальный размер буфера, смещаясь от 2000 в меньшую сторону.
"Запрос такого объема памяти одним куском, скорее всего вызывает систему дефрагментации памяти."
Вряд ли, сейчас выявил, что резервирование памяти под подобный вектор (reserve) происходит практически мгновенно, а сам процесс добавления элементов-изображений в вектор уже и занимает всё время
0
46 / 114 / 11
Регистрация: 24.04.2019
Сообщений: 796
18.03.2024, 17:43
Цитата Сообщение от Georgy van Ral Посмотреть сообщение
сам процесс добавления элементов-изображений в вектор уже и занимает всё время
Во время добавления лампочка обращения к жесткому диску горит?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.03.2024, 17:44
Цитата Сообщение от Дмитрий_1982 Посмотреть сообщение
Во время добавления лампочка обращения к жесткому диску горит?
Он берет изображения прямо с камеры. При чем тут ХДД ?
0
46 / 114 / 11
Регистрация: 24.04.2019
Сообщений: 796
18.03.2024, 17:48
Цитата Сообщение от SmallEvil Посмотреть сообщение
Он берет изображения прямо с камеры.
Если мне не изменяет память, то виртуальная память в современных ОС выделяется через файл подкачки. Когда происходит обращение к этой памяти, происходит своп. Это и занимает время. Только почему при повторной загрузке занимает меньше времени, это вопрос.
0
0 / 0 / 0
Регистрация: 13.03.2024
Сообщений: 11
18.03.2024, 18:02  [ТС]
Цитата Сообщение от Дмитрий_1982 Посмотреть сообщение
Во время добавления лампочка обращения к жесткому диску горит?
К сожалению, у меня на ноутбуке этой лампочки нет.
Обнаружил ещё одну интересную особенность:
Если во время добавления элементов прервать программу, например, на 1000-м элементе, то при следующем запуске до 1000 элемента всё выполнится практически мгновенно, а дальше снова медленно
0
46 / 114 / 11
Регистрация: 24.04.2019
Сообщений: 796
18.03.2024, 18:07
Цитата Сообщение от Georgy van Ral Посмотреть сообщение
К сожалению, у меня на ноутбуке этой лампочки нет.
Посмотрите через диспетчер задач.

Добавлено через 48 секунд
Ну или как там на линуксе это называется.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.03.2024, 19:32
Georgy van Ral, кеширование есть во всех современных ОС.
Очень печально выдеть что вы этого не знаете.
0
Модератор
Эксперт Java
 Аватар для alecss131
2848 / 1356 / 404
Регистрация: 11.08.2017
Сообщений: 4,329
Записей в блоге: 2
18.03.2024, 21:20
А если с помощью ffmpeg кадры руками складывать в какой нибудь контейнер?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2024, 21:20
Помогаю со студенческими работами здесь

Создание массива занимает много времени
Здравствуйте. Нужен совет. В процессе написания некой программы, возникла надобность в создании больших массивов объектов типа Label. В...

Процесс включения компьютера занимает много времени.
Здравствуйте, с некоторых пор случился косяк с компом, при включении долго не может включиться, щелкает оборудованием, лампочки мигают на...

Удаление строк занимает слишком много времени
Привет всем! Помогите справится с проблемой. Есть Excel таблица, в таблице 10000-30000 строк. Происходит поиск значений и при...

Деление больших чисел занимает много времени
Привет всем. Написал функцию для деления больших чисел, но к сожалению вычисления идут очень долго. Может кто-нибудь помочь с переделкой...

Переход в гибернацию занимает слишком много времени
Раньше такого не было, а сейчас уходит до 1 минуты! Или даже больше, точно не засекал - раньше 15 сек примерно!


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru