Конференция "Основная" » Быстро узнать размер строки
 
  • Вольдемар © (21.11.17 10:17) [0]
    В программе ведется лог (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]
    Когда я был ещё студентом и начал задумываться об ведении логов... И разумеется гораздо интереснее "сделать своё", чем прикручивать какие-то там "лог-движки"...
    Одним из первых вариантов было нечто подобное. Что тут такого-то?
    Вот только в таком варианте быстро нашлось множество недостатков: жуткое пожирание памяти, замедление работы программы, при серьёзных ошибках нужной информации в логе не оказывается.

    Вот подумайте - зачем вам держать в оперативке столько строк? И тратить время на их пересохранение (ведь файл будет перезаписываться полностью с нуля)? Надо держать открытый файл на диске и при поступлении данных просто сразу в него дописывать.
    А "очищать лог" вообще не нужно. Разве что для удобства сделать метод мол "освободить файл лога, переименовать его, создать новый пустой файл со старым именем".
 
Конференция "Основная" » Быстро узнать размер строки
Есть новые Нет новых   [118484   +52][b:0][p:0.001]