Russian Qt Forum
Ноябрь 23, 2024, 21:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Скорость обращения к данным
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Скорость обращения к данным (Прочитано 5081 раз)
Firefox
Гость
Скорость обращения к данным
«
:
Декабрь 14, 2017, 12:01 »
Добрый день. Хочу спросить совета по использованию контейнеров. Задача у меня следующая: есть база данных( большая) я ее считываются в QVectot(struct) . В векторе элементом является структура определенного вида. Далее каждые 0.5 секунды мне надо осуществлять выборку из этого вектора по входящим параметрам. Делала ее просто сравнением при обращении по индексу at(i), где i от 0 до размера вектора. Если все подходит, то записываю этот элемент at(i) в новый вектор- результат выборки. Проблемы возникли в том, что при установке программы на маломощную технику (очень маломощную) загрузка процессора 100% и комп умирает. Как можно оптимизировать затраты процессора на одну операцию? Возможно QList будет быстрее?
Вариант с проверкой на изменение параметров, чтобы не делать перебор лишний раз если ничего не поменялось не то про что я спрашиваю. Я спрашиваю про оптимизацию именно с точки зрения программирования, а не алгоритмики.
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Скорость обращения к данным
«
Ответ #1 :
Декабрь 14, 2017, 12:13 »
А почему не делать выборку сразу из базы?
Записан
ArchLinux x86_64 / Win10 64 bit
Firefox
Гость
Re: Скорость обращения к данным
«
Ответ #2 :
Декабрь 14, 2017, 12:25 »
Дело в том ,что к базе у меня нет прямого доступа и данные я получаю от клиента (написанная программа ,которая читает данные и по сети мне их гонит) , а это занимает много времени, потому мне бд пересылают один раз всего.
Записан
Kurles
Бывалый
Offline
Сообщений: 480
Re: Скорость обращения к данным
«
Ответ #3 :
Декабрь 14, 2017, 12:34 »
QList быстрее не будет, так как всё равно надо по каждому элементу проходиться. Тут уже какой-либо индексации не обойтись.
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
Firefox
Гость
Re: Скорость обращения к данным
«
Ответ #4 :
Декабрь 14, 2017, 13:08 »
Stl iteratirs не быстрее при передвижении по контейнеру?
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Скорость обращения к данным
«
Ответ #5 :
Декабрь 14, 2017, 14:23 »
Быстрее вектора другого контейнера с прямым доступом по индексу нет.
* При использовании QVector для чтения значений нужно использовать константные методы (в данном случае at() уже используется).
* Заполняемый массив необходимо распределить заранее с помощью QVector::reserve( int size ), чтобы не происходило перераспределение.
С помощью QtConcurent можно организовать параллельную обработку вектора в пуле потоков, не изменяя сам алгоритм.
Все остальное затрагивает алгоритм, который похоже и нужно оптимизировать.
Записан
Firefox
Гость
Re: Скорость обращения к данным
«
Ответ #6 :
Декабрь 14, 2017, 14:48 »
Спасибо всем.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Скорость обращения к данным
«
Ответ #7 :
Декабрь 14, 2017, 15:54 »
какого уровня маломощная техника и размер базы ?
Записан
Firefox
Гость
Re: Скорость обращения к данным
«
Ответ #8 :
Декабрь 15, 2017, 12:45 »
Бд приблизительно от 500 КБ ,а техника точно не знаю. Приблизительно 2 ядра по 1 ГГц
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Скорость обращения к данным
«
Ответ #9 :
Декабрь 15, 2017, 13:34 »
Что-то не так, если размер вектора не мульены - ресурсов должно хватать. Часто в таких случаях где-то проскочила передача вектора по значению.
Записан
Firefox
Гость
Re: Скорость обращения к данным
«
Ответ #10 :
Декабрь 15, 2017, 17:06 »
Возвращаемый вектор у меня стоит как аргумент функции и он внутри класса заполняется, а функция вызывается из другого класса. И по базе у меня пробегает не один раз а пять
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...