Битва двух якодзун

Очень я люблю сравнивать несравниваемое, а особенно теплое с мягким.

У меня давно есть и переодически продлевается лицензия на RealBasic. Да, простой как грабли тот самый бэйсик, который обвешали гуем и сделали кросс-платформенным.

А тут субботний вечер, всякие мысли лезут в голову и одна из них почему-то проколупала мне дырку в черепе “А какова скорость обработки всяких UI элементов?”

Фигня вопрос, устраиваем битву. В одном углу ринга ставим RealBasic, а в другой – QT5. Делаем простую формочку:

Кнопка запуска, прогресс-бар и поле для отображения текста. И пишем очень сложный код:

RB:

  for i as integer =0 to 100
    ProgressBar1.Value=i
    TextArea1.Text=str(i)
    for q as integer =0 to 1000
      dim p as integer =0
      p=p+q*i
      TextArea1.Text=TextArea1.Text+" "+str(p)
    next
  next
  

QT:

   for(int i=0;i<=100;i++)
    {
        ui->progressBar->setValue(i);
        QTextDocument * d;
        d=new QTextDocument(ui->plainTextEdit);
        QPlainTextDocumentLayout *layout = new QPlainTextDocumentLayout(d);
        d->setDocumentLayout(layout);

        d->setPlainText(QString("%1").arg(i));
        ui->plainTextEdit->setDocument(d);

        for(int q=0;q<=1000;q++)
        {
            int p =0;

        p=p+q*i;
        d->setPlainText(d->toPlainText()+" "+QString("%1").arg(p));
        ui->plainTextEdit->setDocument(d);
      }
    }

Результаты меня убили: RB выполнился за 1:20, QT5 на 12 секунд дольше. Плюс RB не вывесило флаг “Application Not Responding” и где-то по середине сумело один раз обновить UI.

PS Я знаю, что код кривой/неоптимальный и там и там.
PSS Пооптимизировал код. При использовании стандартных виджетов результаты еще хуже: RB 8 секунд, QT5 35. Проблема именно в навороченности стандартных виджетов QT: он там судя по всему простой текст в html рендрит, а только потом его уже отображает. Ибо если поставить вместо поля редактирования label, то скорость резко увеличивается. Но тогда нечестно 🙂