Название: Можно ли ускорить фунции работы с текстом? Отправлено: gidrowolf от Ноябрь 04, 2010, 18:54 Нужно скопировать юникодовый текст в массив слов, выполнить преобразование и вернуть преобразованный текст.
Само преобразование 100кб текста если верить замерам происходит менее чем за 1 мс. В то время как сохранение текста в массив слов занимает 75 секунд!, а загрузка почти целых 6 секунд =(. На процессоре с 2.5 ГГц это непростительно. Код: 75250 for(i=0;i<n;i++){text[i] = ui->PlainTextEdit->toPlainText().utf16()[i];} Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: BlackTass от Ноябрь 04, 2010, 19:36 мне почему то кажется, что не стоит ui->PlainTextEdit->toPlainText().utf16() выполнять в цикле
Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: gidrowolf от Ноябрь 04, 2010, 19:50 мне почему то кажется, что не стоит ui->PlainTextEdit->toPlainText().utf16() выполнять в цикле А как по другому можно скопировать юникодовые значения в массив слов?Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: Denjs от Ноябрь 04, 2010, 20:02 мне почему то кажется, что не стоит ui->PlainTextEdit->toPlainText().utf16() выполнять в цикле А как по другому можно скопировать юникодовые значения в массив слов?Код: const ushort *rezutf16 = ui->PlainTextEdit->toPlainText().utf16() Код: for(i=0;i<n;i++){text[i] = rezutf16[i];} Но, признаться я вообще не понимаю смысла этого присвоения . text - это чО за переменная. нафига она вам? какого типа? QByteArray для чего создан? если text это char* то почему нельзя сделать так : Код: QByteArray myQByteArrayData= ui->PlainTextEdit->toPlainText().toUtf8();// toAscii(), toLatin1(), toLocal8Bit(), see alse QTextCodec. Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: BRE от Ноябрь 04, 2010, 20:12 сначала получить в какую-либо переменную ссылку Так делать нельзя.Код: const ushort *rezutf16 = ui->PlainTextEdit->toPlainText().utf16() Код: for(i=0;i<n;i++){text[i] = rezutf16[i];} Указатель rezutf16 будет указывать на уже разрушенный буфер. Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: gidrowolf от Ноябрь 04, 2010, 20:12 Как посоветовал BlackTass копирую не напрямую а через временную QString, в результате копирование в массив слов с 75 секунд сократилось до <1мс О_О. А обратно с 6 секунд до 1.5 секунды.
Может можно присвоить текст помимо функции setPlainText? А то она тормознутая какая-то. Код: QString tmp; Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: Denjs от Ноябрь 04, 2010, 20:24 Так делать нельзя. гм... похоже что да... ну тогда так :Указатель rezutf16 будет указывать на уже разрушенный буфер. Код: QString str=ui->PlainTextEdit->toPlainText(); Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: gidrowolf от Ноябрь 04, 2010, 20:56 Заменил
Код: ui->PlainTextEdit->setPlainText(tmp); Код: ui->PlainTextEdit->clear(); tmp.fromUtf16(text,n); Ошибочка, надо :):tmp = QString::fromUtf16(text,n); Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: kostya2vntu от Ноябрь 07, 2010, 00:12 Так делать нельзя. гм... похоже что да... ну тогда так :Указатель rezutf16 будет указывать на уже разрушенный буфер. Код: QString str=ui->PlainTextEdit->toPlainText(); Вообще-то оператор [] класса QString возвращает QChar, который уже и есть юникод. Название: Re: Можно ли ускорить фунции работы с текстом? Отправлено: gidrowolf от Ноябрь 07, 2010, 01:26 Так делать нельзя. гм... похоже что да... ну тогда так :Указатель rezutf16 будет указывать на уже разрушенный буфер. Код: QString str=ui->PlainTextEdit->toPlainText(); Вообще-то оператор [] класса QString возвращает QChar, который уже и есть юникод. |