Название: Скорость обращения к данным Отправлено: Firefox от Декабрь 14, 2017, 12:01 Добрый день. Хочу спросить совета по использованию контейнеров. Задача у меня следующая: есть база данных( большая) я ее считываются в QVectot(struct) . В векторе элементом является структура определенного вида. Далее каждые 0.5 секунды мне надо осуществлять выборку из этого вектора по входящим параметрам. Делала ее просто сравнением при обращении по индексу at(i), где i от 0 до размера вектора. Если все подходит, то записываю этот элемент at(i) в новый вектор- результат выборки. Проблемы возникли в том, что при установке программы на маломощную технику (очень маломощную) загрузка процессора 100% и комп умирает. Как можно оптимизировать затраты процессора на одну операцию? Возможно QList будет быстрее?
Вариант с проверкой на изменение параметров, чтобы не делать перебор лишний раз если ничего не поменялось не то про что я спрашиваю. Я спрашиваю про оптимизацию именно с точки зрения программирования, а не алгоритмики. Название: Re: Скорость обращения к данным Отправлено: kuzulis от Декабрь 14, 2017, 12:13 А почему не делать выборку сразу из базы?
Название: Re: Скорость обращения к данным Отправлено: Firefox от Декабрь 14, 2017, 12:25 Дело в том ,что к базе у меня нет прямого доступа и данные я получаю от клиента (написанная программа ,которая читает данные и по сети мне их гонит) , а это занимает много времени, потому мне бд пересылают один раз всего.
Название: Re: Скорость обращения к данным Отправлено: Kurles от Декабрь 14, 2017, 12:34 QList быстрее не будет, так как всё равно надо по каждому элементу проходиться. Тут уже какой-либо индексации не обойтись.
Название: Re: Скорость обращения к данным Отправлено: Firefox от Декабрь 14, 2017, 13:08 Stl iteratirs не быстрее при передвижении по контейнеру?
Название: Re: Скорость обращения к данным Отправлено: ssoft от Декабрь 14, 2017, 14:23 Быстрее вектора другого контейнера с прямым доступом по индексу нет.
* При использовании QVector для чтения значений нужно использовать константные методы (в данном случае at() уже используется). * Заполняемый массив необходимо распределить заранее с помощью QVector::reserve( int size ), чтобы не происходило перераспределение. С помощью QtConcurent можно организовать параллельную обработку вектора в пуле потоков, не изменяя сам алгоритм. Все остальное затрагивает алгоритм, который похоже и нужно оптимизировать. Название: Re: Скорость обращения к данным Отправлено: Firefox от Декабрь 14, 2017, 14:48 Спасибо всем.
Название: Re: Скорость обращения к данным Отправлено: qate от Декабрь 14, 2017, 15:54 какого уровня маломощная техника и размер базы ?
Название: Re: Скорость обращения к данным Отправлено: Firefox от Декабрь 15, 2017, 12:45 Бд приблизительно от 500 КБ ,а техника точно не знаю. Приблизительно 2 ядра по 1 ГГц
Название: Re: Скорость обращения к данным Отправлено: Igors от Декабрь 15, 2017, 13:34 Что-то не так, если размер вектора не мульены - ресурсов должно хватать. Часто в таких случаях где-то проскочила передача вектора по значению.
Название: Re: Скорость обращения к данным Отправлено: Firefox от Декабрь 15, 2017, 17:06 Возвращаемый вектор у меня стоит как аргумент функции и он внутри класса заполняется, а функция вызывается из другого класса. И по базе у меня пробегает не один раз а пять
|