crossplatform.ru

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

> QTextEdit, тормозит
&-rey
  опции профиля:
сообщение 12.12.2009, 0:55
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 12.11.2009
Пользователь №: 1225

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




Репутация:   0  


нужно преобразовать информацию из двоичного вида в текстовое представление.
пробовал:
преобразовывать информацию по кусочкам, и выводить в QTextEdit - результата не дождался ...
преобразовывать информацию в Qstring а по окончании выводить в QTextEdit append(string) - 50 сек
вначале преобразуется в Qstring и добавляем в QtextStream, после заполнения обратно преобразуем к QString и выводим append(stream.readAll()) - 45 сек

аналогичная задача на C++ Builder 2007 и RichEdit выполняется за 2 сек, используя TMemoryStream.

возможно ли ускорить процесс, или норвежская медлительность не позволяет этого сделать ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 12.12.2009, 13:59
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


С QPlainTextEdit всё работает за 10 секунд на моей машине. С QTextEdit около 50 секунд. Сам файл парсится 4 секунды. Количество строк 131072, общее количество символов, которое помещается в textedit - 7077888, прибавим уникодность и получим где-то 6,75*2=13,5Мб

Добавление текста делал через QPlainTextEdit::appendPlainText().
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
&-rey
  опции профиля:
сообщение 12.12.2009, 14:20
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 12.11.2009
Пользователь №: 1225

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




Репутация:   0  


Цитата(SABROG @ 12.12.2009, 14:59) *
С QPlainTextEdit всё работает за 10 секунд на моей машине. С QTextEdit около 50 секунд. Сам файл парсится 4 секунды. Количество строк 131072, общее количество символов, которое помещается в textedit - 7077888, прибавим уникодность и получим где-то 6,75*2=13,5Мб

Добавление текста делал через QPlainTextEdit::appendPlainText().


На моей это 22 сек, т.е. на половину быстрее, но мне нужны фичи TextEdit, а insertPlainText быстродействия не добавляет.
Похоже тормозит собственно QString но другой возможности добавить текст не предусмотрено.
Cтранно то, что с новой версией все еще хуже.

PS: ... как они собираються его на мобилах то использовать, там то процы поменее будут ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.12.2009, 14:47
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Попробуй вместо
QTextStream Stream(new QString);

использовать
    QByteArray outBuf;
    outBuf.reserve( Length * 4 );
    QTextStream Stream( &outBuf, QIODevice::WriteOnly );


Цитата(Litkevich Yuriy @ 12.12.2009, 14:25) *
напиши пару примеров, в которых на мобиле необходимо бинари в TextEdit совать

Да тут скорее вопрос в том, для чего все делать так как делает автор.
А если бинарный файл будет не 1Мб, а 100 или 1Гб? Будет читать весь файл, парсить и втыкать в редактор?
Думаю при таком подходе, пользователи будут отказываться от использования такой программы еще до того как большой файл будет загружен в редактор....

Какой то дельфийский подход, очень удобно написать десять строк кода и получить результат, а потом удивляться почему медленно и требовать от разработчиков инструмента сделать быстро.

2 &-rey
Читай кусок файла, который помещается на экран. Понимаю, что просто использовать QTextExit не получиться, зато твой виджет будет оптимизирован для твоей задачи.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
&-rey
  опции профиля:
сообщение 12.12.2009, 22:28
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 12.11.2009
Пользователь №: 1225

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 12.12.2009, 14:25) *
напиши пару примеров, в которых на мобиле необходимо бинари в TextEdit совать

если выведенное скопировать в текстовый файл то его вставка даст 22 сек.

        QTextStream Stream(file);
        edit->setPlainText(Stream.readAll() + "\n");

т.е. если я захотел почитать к примеру "Война и Мир", то нужно будет подождать ...
вопрос ведь не в том как обойтись, а в том почему приходится это делать ?
вот к примеру вызов Copy из контекстного меню вставленного куска текста зависает на 22 сек, а это уже не преобразование текста а обработка существующего.
Цитата
Какой то дельфийский подход, очень удобно написать десять строк кода и получить результат, а потом удивляться почему медленно и требовать от разработчиков инструмента сделать быстро.

удивляться приходиться как раз не в делфи, хотя речь шла о С++ Builder
        TMemoryStream *Stream = new(TMemoryStream);
                         ........
        SendMessage(edit->Handle, EM_REPLACESEL, 0, (long)Stream->Memory);

те же пару строк кода, и все работает быстро, и вставка, и удаление, и копирование, и прочие возможности RichEdit
я то наивно полагал, что библиотеки разрабатываються для ускорения процесса разработки, или нет ?
Цитата
Думаю при таком подходе, пользователи будут отказываться от использования такой программы еще до того как большой файл будет загружен в редактор....

и будут правы :)
Цитата
Читай кусок файла, который помещается на экран. Понимаю, что просто использовать QTextExit не получиться, зато твой виджет будет оптимизирован для твоей задачи.

это примерно то же самое что массаж деревянной ноги, такие мысли были, но пока я их гоню от себя, надеясь на лучшее.
да и подобные мысли были у человека ссылку на тему которого дал Litkevich Yuriy и как следует из прочтения не все так просто.
А опыта у меня в програмировании мало, так что пока отложим.
Цитата( @ 12.12.2009, 17:20) *
Программа в помощь, и тамже можно почитать всю тему - Чем большой текст показать?
и цитаты от тель:
Цитата
Я пробовал QTextStream но на гигабайтах он работает гнусно медленно. Прямое чтение в несколько раз быстрее.


это читал, но не очень понял что имелось ввиду под прямым чтением. Ссылки то ведут на редактор в delphi (какая гадость), но дело в том что в Builder то как раз проблем нет.
или есть возможность совместить QT и RichEdit ? а как ?

Цитата(SABROG @ 12.12.2009, 15:50) *
Да и скорость потока это не главная проблема тормозов. Время парсинга у меня занимает точно такое же как и с QString - 5062мс (debug), 3313мс (release).
В релизной сборке весь текст добавляется 1 секунду в QPlainTextEdit.

вот если верить Qtime
Count of lines: 131072, elapsed: 10641
Strings appended. Elapsed: 21922
но реально получается на 15 сек больше, видимо доп затраты на отображение.

Есть ли смысл написать в support ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- &-rey   QTextEdit   12.12.2009, 0:55
- - SABROG   Код и двоичную информацию в студию.   12.12.2009, 9:30
|- - &-rey   Цитата(SABROG @ 12.12.2009, 10:30) Код и ...   12.12.2009, 11:12
|- - &-rey   скачал версию 4.6.0 тот же код выполняется за 2.5 ...   12.12.2009, 13:26
- - SABROG   С QPlainTextEdit всё работает за 10 секунд на моей...   12.12.2009, 13:59
|- - &-rey   Цитата(SABROG @ 12.12.2009, 14:59) С QPla...   12.12.2009, 14:20
|- - BRE   Попробуй вместо QTextStream Stream(new QString...   12.12.2009, 14:47
|- - SABROG   Цитата(BRE @ 12.12.2009, 14:26) Попробуй ...   12.12.2009, 14:50
||- - BRE   Цитата(SABROG @ 12.12.2009, 14:50) А заче...   12.12.2009, 14:55
|- - &-rey   Цитата(Litkevich Yuriy @ 12.12.2009, 14:2...   12.12.2009, 22:28
- - Litkevich Yuriy   Цитата(&-rey @ 12.12.2009, 17:20...   12.12.2009, 14:25
- - SABROG   Я склоняюсь к тому, что тормозит QTextDocument, а ...   12.12.2009, 14:26
- - SABROG   Цитата(BRE @ 12.12.2009, 14:55) А зачем и...   12.12.2009, 15:18
|- - BRE   Цитата(SABROG @ 12.12.2009, 15:18) Ладно,...   12.12.2009, 17:42
- - Litkevich Yuriy   Программа в помощь, и тамже можно почитать всю тем...   12.12.2009, 16:20
- - SABROG   Цитата(&-rey @ 12.12.2009, 22:28...   12.12.2009, 23:04
- - Litkevich Yuriy   Цитата(&-rey @ 13.12.2009, 1:28)...   13.12.2009, 4:42
- - &-rey   Цитата(Litkevich Yuriy @ 13.12.2009, 5:42...   13.12.2009, 19:40


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


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




RSS Текстовая версия Сейчас: 28.12.2024, 15:05