crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Оптимизировать...
kibsoft
  опции профиля:
сообщение 10.11.2009, 14:07
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


Один товарищ зае...л меня с 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);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2009, 14:30
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9649
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kibsoft @ 10.11.2009, 17:07) *
подскажите, как можно ускорить работы программы
отказатся от виджета и использовать представление+модель

Виджет расчитан, в лучшем случае, на сотни элементов
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 10.11.2009, 14:31
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Попробуй заменить
str << ((str1+QString::number(i)+str2+QString::number(sum)));

на
str << QString("Number: %1  Sum: %2").arg(i).arg(sum);

Может чуть добавить производительности
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2009, 14:47
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9649
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


вообще не мешало бы померить время, где больше всего времени затрачивается.

Можно вот этим воспользоваться, для Qt >=4.5
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 10.11.2009, 14:56
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


С использование представление+модель работа программу заметно ускорилось, спасибо :) и памяти меньше жрет..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 10.11.2009, 14:57
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Хоть может уже не актуально, но вот мой вариант :)
Раскрывающийся текст
#include <QApplication>
#include <QListView>
#include <QStringListModel>

int main(int argc, char* argv[]) {
    QApplication app(argc,argv);
    QStringList str;
    uint sum=0;
    for(int i=0;i<150000;++i)
    {
        sum+=i;
        str << QString("Number: %1  Sum: %2").arg(i).arg(sum);
    }
    QStringListModel* m = new QStringListModel;
    m->setStringList(str);
    QListView s;
    s.setUniformItemSizes(true);
    s.setModel(m);
    s.show();
    return app.exec();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 10.11.2009, 15:18
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


Цитата
Хоть может уже не актуально, но вот мой вариант :)

Я так и сделал :)
Засек в Process Explorer:
время на запуск приложения: 78мс
время на выполнение: 764мс
Ммм..не помешало бы еще ченить оптимизировать, у друга 500мс на выполнение в C#...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2009, 15:31
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9649
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kibsoft @ 10.11.2009, 18:18) *
у друга 500мс на выполнение в C#...
а этот тип string в C# поддерживает Unicode?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 10.11.2009, 15:40
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


А я хз... вот теперь хорошая программа :)
QStringList str;
    uint sum=0;
    char x[100];
    for(int i=0;i<=1500000;++i)  {
        sum+=i;
        sprintf(x,"Number: %i Sum: %i",i,sum);
        str.append(x);
    }
    model->setStringList(str);
    lv->setModel(model);

450мс работа программы :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.12.2018, 17:00