Провожу тест: заполняю мемо изначально 100 000 строк, затем в таймере добавляю по 1 строке:
procedure TForm19.Timer1Timer(Sender: TObject);
begin
// While Memo1.Lines.Count > 1000 do Memo1.lines.delete(0); { <- не влияет на поведение }
inc(Counter);
Memo1.Lines.Add(Format('================== new test string number # %d -- ', [ Counter ]));
Memo1.GoToTextEnd;
end;
Примерно раз в 10 секунд это приложение подвисает секунды на 3-4:(на скрине 2х ядерная виртуалка, т.е. основной поток в эти моменты не отвечает).
Загрузка ЦПУ в остальное время тоже не кажется мне адекватной, в сравнении с аналогичным VCL приложением:
Первую проблему с фризами можно убрать таким образом:
В этом случае отображения скроллбаров становится не совсем корректным, зато убираются фризы, сильно раздражающие пользователей.
Вопросы такие:
1) есть ли более быстрый аналог TMemo (для целей вывода лога с возможностью копировать из лога куски, не обязательно целые строки, т.к. ListBox не подходит )
2) Можно ли как-то получше оптимизировать работу с имеющимся TMemo?
P.S. 100 000 строк взято для наглядности. В реальном приложении в логе около 1-3 тыс. строк, но и загружено оно помимо вывода лога другими задачами, так что фризы все равно ощутимы.(хотя и не так видны на графике ЦПУ)
Вопрос
Nick Peterson
Провожу тест: заполняю мемо изначально 100 000 строк, затем в таймере добавляю по 1 строке:
procedure TForm19.Timer1Timer(Sender: TObject); begin // While Memo1.Lines.Count > 1000 do Memo1.lines.delete(0); { <- не влияет на поведение } inc(Counter); Memo1.Lines.Add(Format('================== new test string number # %d -- ', [ Counter ])); Memo1.GoToTextEnd; end;
Примерно раз в 10 секунд это приложение подвисает секунды на 3-4:(на скрине 2х ядерная виртуалка, т.е. основной поток в эти моменты не отвечает).
Загрузка ЦПУ в остальное время тоже не кажется мне адекватной, в сравнении с аналогичным VCL приложением:
Первую проблему с фризами можно убрать таким образом:
В этом случае отображения скроллбаров становится не совсем корректным, зато убираются фризы, сильно раздражающие пользователей.
Вопросы такие:
1) есть ли более быстрый аналог TMemo (для целей вывода лога с возможностью копировать из лога куски, не обязательно целые строки, т.к. ListBox не подходит )
2) Можно ли как-то получше оптимизировать работу с имеющимся TMemo?
P.S. 100 000 строк взято для наглядности. В реальном приложении в логе около 1-3 тыс. строк, но и загружено оно помимо вывода лога другими задачами, так что фризы все равно ощутимы.(хотя и не так видны на графике ЦПУ)
Ссылка на комментарий
20 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.