Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Быстро узнать размер строки


Вольдемар ©   (21.11.17 10:17

В программе ведется лог (TStringList), который периодически сохраняется на диск. Лог может стать большим, и поэтому иногда его надо чистить.

Делаю так:
 if (Length(LogList.Text) > 1000000) then
   LogList.Clear;

Есть быстрее способ узнать размер лога, чем Length?

Спасибо.


Pavia ©   (21.11.17 10:20[1]

LogList.count


Игорь Шевченко ©   (21.11.17 10:37[2]

Надписать метод TStringList.Add не предлагать ?

Я удивляюсь, какой же уровень у программистов, плинтус Эверестом кажется.


sniknik ©   (21.11.17 11:35[3]

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


Германн ©   (22.11.17 03:20[4]


> Игорь Шевченко ©   (21.11.17 10:37) [2]
>
> Надписать метод TStringList.Add не предлагать ?
>
> Я удивляюсь, какой же уровень у программистов, плинтус Эверестом
> кажется.
>

Уровень программистов как раз "на уровне". :)
Я правда в последнее время сужу только по программистам микроконтроллеров.
Но и тут - этот вопрос явно вопрос малограмотного. Но всё же не троешника. Он пытается написать код сам.


Pavia ©   (22.11.17 06:20[5]

Ничего он писать не пытается. Это обычное тестовое задание.


icWasya ©   (22.11.17 10:00[6]

Внутри TStringList.Text из всех строк собирается одна длинная строка, что вызывает перевыделение памяти.
поэтому

int i,Len;
 Len:=0;
 for i:=0 to LogList.Count-1 do
   Len:=Len+Length(LogList[i]);

может быть быстрееж


Вайрекс   (16.01.18 21:13[7]

Когда я был ещё студентом и начал задумываться об ведении логов... И разумеется гораздо интереснее "сделать своё", чем прикручивать какие-то там "лог-движки"...
Одним из первых вариантов было нечто подобное. Что тут такого-то?
Вот только в таком варианте быстро нашлось множество недостатков: жуткое пожирание памяти, замедление работы программы, при серьёзных ошибках нужной информации в логе не оказывается.

Вот подумайте - зачем вам держать в оперативке столько строк? И тратить время на их пересохранение (ведь файл будет перезаписываться полностью с нуля)? Надо держать открытый файл на диске и при поступлении данных просто сразу в него дописывать.
А "очищать лог" вообще не нужно. Разве что для удобства сделать метод мол "освободить файл лога, переименовать его, создать новый пустой файл со старым именем".


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо