![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Раньше был обычный массив (динамический), который содержал значения определенных параметров, прочитанных из лог-файла (широта, долгота, скорость и пр.). Сейчас сделал в виде вектора. Вместо оператора new теперь использую resize. Но так как эти операции чересчур затратные (а цикл может содержать и 100000 итераций (где каждый раз происходит выделение)), то стало необходимо сделать алгоритм немного по-другому.
Выделять память блоками. Т.е. вместо след. операций: code1 Делать следующее: code2 При замене на QVector code1 перешел в следующий: code3
Как переписать code2 для использования в векторе QVector? Заранее благодарен за помощь.... Сообщение отредактировал AD - 30.6.2009, 15:08 |
|
|
![]() |
Влад |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Так, получилось ускорение с помощью массивов (пока что достаточное, но не необходимое)!
На следующей неделе все-таки доразбираюсь с распределителем памяти и постараюсь перевести решение для векторов. Код следующий:
cpp-code
Именно строки для ускорения кода - вот:
Еще раз повторюсь, что с помощью векторов я все-таки постараюсь сделать корректный код, но чуть позже! СПАСИБО ВСЕМ ЗА ПОМОЩЬ! Еще, возможно, обращусь! ![]() Сообщение отредактировал AD - 3.7.2009, 12:04 |
|
|
AD |
![]()
Сообщение
#4
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Сделал распределитель памяти следующий:
allocator
Распределитель работает. Но работает ну очень медленно! Собственно код чтения остался тот, что я приводил до того, как снова перешел к массивам! Скачал тестовую версию VTune посмотрел на что уходит время. Основная нагрузка на функцию grow(). Что сделать, чтобы не было такой убийственно-долгой загрузки (даже пары-тройки файлов)? Где еще исправить и что? Вот результаты работы профилировщика: [attachment=697:intelVTune_results.JPG] А вот работа профилировщика при коде, который был приведен в прошлом посте, т.е. при работе с массивами: [attachment=698:intelVTu...ts_array.JPG] P.S. В обоих случаях я загружал один и тот же файл (один!)! Сообщение отредактировал AD - 6.7.2009, 17:41 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 14.7.2025, 11:28 |