LINUX.ORG.RU
ФорумTalks

ktranslator или почему KDE тормозит


0

0

Недавно тут опубликовали статью о ktranslator,
от нечего делать посмотрел исходный код,
встретил там например такой код

>if( dic.contains( word ) ) entry = dic[word];

интересно, а если исходники самого KDE посмотреть там много таких перлов,
как вы думаете?

anonymous

> а если исходники самого KDE посмотреть там много таких перлов, как вы думаете?

KDE много людей писали, там наверняка есть код хороший и есть код плохой.

Интересно, dic хранит в памяти весь текущий словарь? В таком случае, 2 раза запускать поиск слова -- верх кретинизма.

nsav-ng
()
Ответ на: комментарий от nsav-ng

>KDE много людей писали, там наверняка есть код хороший и есть код плохой.

не важно как много хороших,
факт один KDE торрррмозит,
факт два, пара таких перлов и от того есть хороший код или нет ничего уже не зависит.

anonymous
()
Ответ на: комментарий от suser

>ИМХО не так уж и тормозит, если железо не десятилетней давности.

когда я покупал свой атлон 2700+ и 512 мегов оперативки,
я наивный полагал что этого хватит для десктопа-то, но...

если работать с одним приложениям то конечно не тормозит, а вот если с несколькими, то даже konsole стартует несколько секунд при нагрузке на систему,
в то время как xterm в тех же условиях стартует мгновенно.

anonymous
()
Ответ на: комментарий от anonymous

> если работать с одним приложениям то конечно не тормозит, а вот если с несколькими, то даже konsole стартует несколько секунд при нагрузке на систему, в то время как xterm в тех же условиях стартует мгновенно.

Ядро 2.6? Preemptible kernel в ядре включал? Если нет, сначала попробуй, а потом говори про тормоза.

anonymous
()

        QMap<QString, int> map;
        QString entry;
        int e;

        for(int i = 0;i < 300000;i++)
        {
            entry = QString::fromLatin1("%1").arg(i);
            map[entry] = i;
        }

        QTime t1 = QTime::currentTime();

        for(int i = 100000;i < 200000;i++)
        {
            entry = QString::fromLatin1("%1").arg(i);

            if(map.contains(entry))
                e = map[entry];
        }

        QTime t2 = QTime::currentTime();

        printf("V1 %d\n", t1.msecsTo(t2));

        t1 = QTime::currentTime();

        QMap<QString, int>::iterator it;

        for(int i = 100000;i < 200000;i++)
        {
            entry = QString::fromLatin1("%1").arg(i);
            it = map.find(entry);

            if(it != map.end())
                e = it.data();
        }

        t2 = QTime::currentTime();

        printf("V2 %d\n", t1.msecsTo(t2));

---------------------------------------------------------------------

[qmap-test]$ ./qmap-test
V1 474
V2 349

---------------------------------------------------------------------

Разница ~ 25%. Не так уж и много, особенно если QMap размером < 10000 элементов. Там разница будет вообще < 10%.

Keiko
()
Ответ на: комментарий от Keiko

так QMap в большинстве словарей больше чем 100000, это раз.
а во-вторых, проблемма же не в этом факте как факте,
а выводах которые можно сделать из этого факта,
программист просто не представляет как это внутри устроенно,
QMap в данном случае. и соотвественно даже не может представить
почему его код может тормозить.

anonymous
()
Ответ на: комментарий от anonymous

я имел ввиду не 100 тысяч, а 10.
ЗЫ
словари обычно имеют размер 30 тысяч слов - маленькие
60-70 тысяч нормальные.

и словарей то много, и один запрос, если он сделан с ошибкой(т.е.
если слово введено с ошибкой требует десятки и сотни запросов)

anonymous
()
Ответ на: комментарий от anonymous

я же и говорю - выборка 100'000 слов из центра map-а двумя способами отличается на 25%. В реальном случае количество выборок в сотни раз меньше, и поэтому сколько времени было потрачено - 10 мс. или 7 мс. - не играет роли. Это я к тому, что тормозить из-за этого программа никогда не будет.

Хотя всё равно более правильно, конечно же, пользоваться find-ом.

Keiko
()
Ответ на: комментарий от Keiko

>и поэтому сколько времени было потрачено - 10 мс. или 7 мс

возьмем к примеру stardict, когда запускаешь поиск похожего слова по всем словарям, это занимает порядка секунд 6-7, если это будет требовать вместо этого 10 секунд, я думаю это будет заметно.

anonymous
()
Ответ на: комментарий от anonymous

> 2.4, нафига мне такой тормоз на однопроцессорной машине

Я тоже раньше с 2.4 упирался, потом поставил 2.6 с preemptible и кеды стали реально летать.

anonymous
()
Ответ на: комментарий от Keiko

>выборка 100'000 слов из центра map-а

если принять во внимание, что QMap основан на бинарном дереве,
выборка из середины - полный идиотизм.

anonymous
()
Ответ на: комментарий от anonymous

может быть. середина была выбрана, чтобы исключить крайности. У вас я смотрю не-идиотизма в программировании не бывает. Чтобв ни было - всё идиотизм.

Keiko
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.