|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.10.2017, 13:07 | #1 |
Пользователь
Регистрация: 13.05.2007
Сообщений: 60
|
быстрый RichEdit с большим объемом текста
Здравствуйте. Программа занимается определенными измерениями, результаты выводятся в RichEdit, строки добавляются раскрашенные (поэтому собственно и RichEdit). Измерения идут непрерывно (пока не остановишь). Проблема в том, что вывод на экран отнимает время, т.е. если делать без вывода, то измерения проходят гораздо быстрее. Однако вывод на экран в процессе измерения нужен, причем с цветными строками. Сейчас сделано так: если в RichEdit больше 4000 строк, то первые 255 строк удаляются (потому что с большим объемом текста вывод тормозит сильно). Если нужен весь текст, то предусмотрена запись в файл. Возникла необходимость ускорить измерения, а также желательно увеличить буфер (не 4000 строк, а больше, лучше без ограничений). В связи с этим я думаю создать еще один RichEdit в памяти и во время измерений вывод делать в него (без удалений), а в тот, что на форме выводить только последние строки, которые влезают в экран. А если измерения остановлены, то из RichEdit'а в памяти перекидывать в RichEdit на форме (чтобы можно было просмотреть результаты).
Вопрос в том, правильное ли это решение и как эффективнее это сделать. Меня беспокоит, не будет ли перекидывание большого текста из RichEdit'а в памяти в RichEdit на форме слишком долгим и что будет, когда объем текста станет совсем уж большим (как это отразится на памяти и производительности). |
09.10.2017, 13:19 | #2 | |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Цитата:
Пусть измерения выполняются в отдельном потоке и помещают результаты в какой-нибудь буфер (БД, временный файл и т.д.), а поток UI просто будет периодически обновлять данные RichEdit из него. Это просто, как один из возможных вариантов. |
|
09.10.2017, 14:44 | #3 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 594
|
|
09.10.2017, 14:57 | #4 |
Пользователь
Регистрация: 13.05.2007
Сообщений: 60
|
BeginUpdate/EndUpdate используются. Измерения (и соответственно вывод) происходят блоками. После каждого блока я вывожу время измерения. Так вот если делать без вывода, то время одно и то же, а если с выводом, то после каждого блока время все больше и больше (пропорционально количеству текста).
|
09.10.2017, 22:36 | #5 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
А нам и без RichEdit'ов неплохо живётся.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
10.10.2017, 09:07 | #6 |
Пользователь
Регистрация: 13.05.2007
Сообщений: 60
|
Идея хорошая, но пожалуй не подойдет. Там запускают измерения и смотрят на экран. Бывает так, что допустим видят строки определенного цвета и останавливают, чтобы посмотреть где брак. С многопоточностью будет несинхронизировано, т.е. измерение давно пройдет, а результат только выведется.
Проект довольно сложный, да еще не мой, я не готов пока RichEdit менять на ListBox. |
10.10.2017, 11:01 | #7 | |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Цитата:
Просто как варианты... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с большим количеством текста в String иTextbox | Дмитрий999 | Visual C++ | 0 | 20.02.2012 20:07 |
Загрузка в RichEdit текста из файла, и получение его из RichEdit | Byurrer | Общие вопросы C/C++ | 1 | 09.04.2011 10:17 |
работа с большим объемом данных | Ckif | Microsoft Office Excel | 1 | 14.09.2010 17:05 |
Форматирование текста в RichEdit. | Air | Общие вопросы Delphi | 2 | 03.03.2008 15:15 |