boost - вон из профессии
От: Kluev  
Дата: 11.06.08 13:07
Оценка: 7 (2) +1 -14 :))) :)
решил сделать небольшой тест. померял скорость работы boost::lexical_cast, strtod и своего велосипеда.
велосипед мне пришлось написать т.к. strtod внутри вызывает strlen и производительность сильно падает на длинных строках.

результаты, сек
bicycle:  0.135
crt::     0.682   (в 5 раз медленнее)
boost:    6.289   (в 46.5 раз медленнее велосипеда и в 10 раз медленнее crt)


тест:
#pragma comment(lib, "Winmm.lib")

int main(int argc, char* argv[])
{
    DWORD t;
    double d, tmp;
    const char *str = "3.1415", *end = str + strlen(str);

    for (int k = 0; k < 3; k++)
    {
    // boost
        d = 0; t = timeGetTime();
        for (int i = 0; i < 1000000; i++)
        {
            d += lexical_cast<double>(str);
        }
        t = timeGetTime() - t;
        printf("boost: %g: %g\n", d, t*1e-3);

    // crt
        d = 0; t = timeGetTime();
        for (int i = 0; i < 1000000; i++)
        {
            char *p;
            d += strtod(str, &p);
        }
        t = timeGetTime() - t;
        printf("crt: %g: %g\n", d, t*1e-3);

    // bicycle
        d = 0; t = timeGetTime();
        for (int i = 0; i < 1000000; i++)
        {
            const char *cp;
            num_parse(&tmp, &cp, str, end);
            d += tmp;
        }
        t = timeGetTime() - t;
        printf("bicycle: %g: %g\n", d, t*1e-3);
    }
    return 0;
}



19.06.08 15:05: Перенесено модератором из 'C/C++' — получился флейм — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.