Russian Qt Forum
Ноябрь 23, 2024, 13:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Оптимизировать код...  (Прочитано 8957 раз)
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« : Ноябрь 09, 2009, 14:25 »

Код:
QApplication app(argc,argv);
    QWidget w;
    QString str1("Number: "),str2(" Sum: ");
    QStringList str;
    QListWidget s(&w);
    uint sum=0;
    w.show();
    for(int i=0;i<150000;++i)
    {
        sum+=i;
        str << (str1+QString::number(i)+str2+QString::number(sum));
    }
    s.addItems(str);
    app.exec();
Данный код выполняется 8 секунд, можно ли как-то ускорить?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Ноябрь 09, 2009, 14:29 »

Код:
QApplication app(argc,argv);
    QWidget w;
    QString str1("Number: "),str2(" Sum: ");
    QStringList str;
    QListWidget s(&w);
    uint sum=0;
    w.show();
    for(int i=0;i<150000;++i)
    {
        sum+=i;
        str << (str1+QString::number(i)+str2+QString::number(sum));
    }
    s.addItems(str);
    app.exec();
Данный код выполняется 8 секунд, можно ли как-то ускорить?

Код
Diff
-str << (str1+QString::number(i)+str2+QString::number(sum));
+str << QString("Number: %1, Sum: %2").arg(i).arg(sum);
 

И поробуй s.setUniformItemSizes(true);
« Последнее редактирование: Ноябрь 09, 2009, 14:30 от Alex Custov » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #2 : Ноябрь 09, 2009, 14:43 »

setUniformItemSizes(true) сработало! теперь за секунду выводит..прочитал в документации, что это свойство дожно быть тру, только когда все элементы одинакового размера..что это значит? у меня же все строки разного размера...
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #3 : Ноябрь 10, 2009, 14:19 »

Один товарищ зае...л меня с WPF и C#, написали прогу, которая выводит сумму предыдущих элементов, но он создает уже инициализированный массив, т.е. string[] str=new string[150000] и естественно она работает быстрее... у меня тормоз проявляется в строке lw->addItems(str), подскажите, как можно ускорить работы программы, чтобы он от меня отстал наконец  Улыбающийся

Код:
QListWidget *lw;
 lw=new QListWidget();
    lw->setUniformItemSizes(true);
QString str1("Number: "),str2(" Sum: ");
    QStringList str;
    uint sum=0;
    for(int i=0;i<=150000;++i)  {
        sum+=i;
        str << ((str1+QString::number(i)+str2+QString::number(sum)));
    }
    lw->addItems(str);
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Ноябрь 10, 2009, 14:27 »

QVector vector (150000);
блаблабла
QStringList str(QList<QString>::fromVector(vector));

и сделай таки
QString("Number: %1, Sum: %2").arg(i).arg(sum);
« Последнее редактирование: Ноябрь 10, 2009, 14:32 от Авварон » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #5 : Ноябрь 10, 2009, 14:42 »

Если вы имели ввиду так:
Код:
QVector<QString> vector(150000);
    uint sum=0;
    for(int i=0;i<150000;++i)  {
        sum+=i;
        vector[i]= QString("Number: %1 Sum: %2").arg(i).arg(sum);;
    }
    QStringList str(QList<QString>::fromVector(vector));
    lw->addItems(str);
то результат тот же Грустный
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Ноябрь 10, 2009, 14:49 »

имхо тут уже ограничение вьюхи... Можно попробовать сделать QStringListModel, запихать ее во QListView и настроить его как в примере fetchMore. Да, и показывать вьюху после добавления
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #7 : Ноябрь 10, 2009, 14:55 »

Представление+модель ускорило работу приложения Улыбающийся спасибо! еще наверное можно использовать не QString, а массивы char  Смеющийся
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Ноябрь 10, 2009, 15:00 »

не QString ты не засунешь в модель... Я думал о QLatin1String, но ее все равно надо конвертировать в QString
а ты делал fetch?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #9 : Ноябрь 10, 2009, 15:10 »

Не, я так делал:
Код:
uint sum=0;
    for(int i=0;i<=150000;++i)  {
        sum+=i;
        str.append(QString("Number: %1 Sum: %2").arg(i).arg(sum));

    }
    model->setStringList(str);
    lv->setModel(model);
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Ноябрь 10, 2009, 15:12 »

попробуй дополнительно глянуть этот пример. По идее должно сделать мгновенной работу
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #11 : Ноябрь 10, 2009, 15:22 »

Не совсем понимаю, что мне оттуда может помочь? Там же элементы добавляются во время скрола?
« Последнее редактирование: Ноябрь 10, 2009, 15:24 от kibsoft » Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #12 : Ноябрь 10, 2009, 15:38 »

да, я тоже глянул, там надо модель переделывать... Работы минут на 10, отнаследовавшись от QStringListModel. В том-то и вся фича, что грузить не все, а частями (к примеру Ворд так делает). Заставь лучше того чела сделать аналогично и посмотрите у кого больше кода выйдет
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #13 : Ноябрь 10, 2009, 15:41 »

Нашел хорошее решение Улыбающийся
Код:
QStringList str;
    uint sum=0;
    char x[100];
    for(int i=0;i<=150000;++i)  {
        sum+=i;
        sprintf(x,"Number: %i Sum: %i",i,sum);
        str.append(x);
    }
    model->setStringList(str);
    lv->setModel(model);
450мс работа программы Улыбающийся было 800 с QString..
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #14 : Ноябрь 10, 2009, 15:45 »

а шарп сколько?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.096 секунд. Запросов: 23.