crossplatform.ru

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

 
Тема закрытаНачать новую тему
> Сильное падение производительности при выносе части вычислений в другую функцию
RazrFalcon
  опции профиля:
сообщение 20.10.2012, 3:45
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Иметься некая математическая функция (все функции статические):

// этот вариант в 4-е раза медленней второго варианта
someStaticFunc()
{
    QPoint lastPos = QPoint(0, 0);
    for (int a = startFi; a >= endFi; --a) {
        QPoint p = func(cx, cy, radius, a);
        list.append(nextFunc(lastPos.x(), lastPos.y(), p.x(), p.y(), true));
        lastPos = p;
    }
}

QPoint Class::func(const int &x0, const int &y0, const int &radius, const int &angle)
{
    int x = floor(x0 + radius * cos(angle*PI/180) + 0.5);
    int y = floor(y0 + radius * sin(angle*PI/180) + 0.5);
    return QPoint(x, y);
}


// без выноса части вычислений в func все работает быстро
someStaticFunc()
{
    int lastX = 0;
    int lastY = 0;
    for (int a = startFi; a >= endFi; --a) {
        int x = floor(x0 + radius * cos(a*PI/180) + 0.5);
        int y = floor(y0 + radius * sin(a*PI/180) + 0.5);
        list.append(nextFunc(lastX, lastY, x, y, true));
        lastX = x;
        lastY = y;
    }
}


Неужели ~4-х кратное падение производительности вызвано слишком частым созданием/возвратом объектов(QPoint)?

Как тогда вынести часть кода в другую функцию, без падения производительности, через указатели?

Сообщение отредактировал RazrFalcon - 20.10.2012, 3:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 5.12.2024, 2:29