Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2017, 13:07   #1
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
Вопрос быстрый RichEdit с большим объемом текста

Здравствуйте. Программа занимается определенными измерениями, результаты выводятся в RichEdit, строки добавляются раскрашенные (поэтому собственно и RichEdit). Измерения идут непрерывно (пока не остановишь). Проблема в том, что вывод на экран отнимает время, т.е. если делать без вывода, то измерения проходят гораздо быстрее. Однако вывод на экран в процессе измерения нужен, причем с цветными строками. Сейчас сделано так: если в RichEdit больше 4000 строк, то первые 255 строк удаляются (потому что с большим объемом текста вывод тормозит сильно). Если нужен весь текст, то предусмотрена запись в файл. Возникла необходимость ускорить измерения, а также желательно увеличить буфер (не 4000 строк, а больше, лучше без ограничений). В связи с этим я думаю создать еще один RichEdit в памяти и во время измерений вывод делать в него (без удалений), а в тот, что на форме выводить только последние строки, которые влезают в экран. А если измерения остановлены, то из RichEdit'а в памяти перекидывать в RichEdit на форме (чтобы можно было просмотреть результаты).
Вопрос в том, правильное ли это решение и как эффективнее это сделать.
Меня беспокоит, не будет ли перекидывание большого текста из RichEdit'а в памяти в RichEdit на форме слишком долгим и что будет, когда объем текста станет совсем уж большим (как это отразится на памяти и производительности).
fanlis вне форума Ответить с цитированием
Старый 09.10.2017, 13:19   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от fanlis Посмотреть сообщение
Проблема в том, что вывод на экран отнимает время, т.е. если делать без вывода, то измерения проходят гораздо быстрее. Однако вывод на экран в процессе измерения нужен, причем с цветными строками.
Откройте для себя многопоточность.
Пусть измерения выполняются в отдельном потоке и помещают результаты в какой-нибудь буфер (БД, временный файл и т.д.), а поток UI просто будет периодически обновлять данные RichEdit из него. Это просто, как один из возможных вариантов.
Streletz вне форума Ответить с цитированием
Старый 09.10.2017, 14:44   #3
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от fanlis Посмотреть сообщение
Проблема в том, что вывод на экран отнимает время, т.е. если делать без вывода, то измерения проходят гораздо быстрее. Однако вывод на экран в процессе измерения нужен, причем с цветными строками
А просто почитать про методы BeginUpdate/EndUpdate терпения не хватило?
kropotkina-alice вне форума Ответить с цитированием
Старый 09.10.2017, 14:57   #4
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
А просто почитать про методы BeginUpdate/EndUpdate терпения не хватило?
BeginUpdate/EndUpdate используются. Измерения (и соответственно вывод) происходят блоками. После каждого блока я вывожу время измерения. Так вот если делать без вывода, то время одно и то же, а если с выводом, то после каждого блока время все больше и больше (пропорционально количеству текста).
fanlis вне форума Ответить с цитированием
Старый 09.10.2017, 22:36   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

А нам и без RichEdit'ов неплохо живётся.
Вложения
Тип файла: rar StringList.rar (167.0 Кб, 15 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 10.10.2017, 09:07   #6
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Откройте для себя многопоточность.
Идея хорошая, но пожалуй не подойдет. Там запускают измерения и смотрят на экран. Бывает так, что допустим видят строки определенного цвета и останавливают, чтобы посмотреть где брак. С многопоточностью будет несинхронизировано, т.е. измерение давно пройдет, а результат только выведется.
Цитата:
Сообщение от Pavia Посмотреть сообщение
А нам и без RichEdit'ов неплохо живётся.
Проект довольно сложный, да еще не мой, я не готов пока RichEdit менять на ListBox.
fanlis вне форума Ответить с цитированием
Старый 10.10.2017, 11:01   #7
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от fanlis Посмотреть сообщение
видят строки определенного цвета и останавливают, чтобы посмотреть где брак
Можно поиграться с размером буфера и таймером обновления. Также можно возложить описанные Вами функции на саму программу. Ведь наверняка есть значения допусков на детали.
Просто как варианты...
Streletz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с большим количеством текста в 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