powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Поиск: Искать ответы на сообщение: #478716  
11 сообщений из 11, страница 1 из 1
Языки программирования семейства Pascal / Как будет быстрее?
    #478716
s62
Скрыть профиль Поместить в игнор-лист
Участник
Неуловимый Джо [игнорируется] 

Что касается добавления в StringList, то похоже, что недолго. Хотя наверное зависит и от того, какие строки добавлять.

Вот тут примерно 3 мс на стареньком Core i5-4440:
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm1.Button2Click(Sender: TObject);
var SL: TStringList;
  SW: TStopWatch;
  i: integer;
begin
  SL := TStringList.Create;
  try
    SW := TStopwatch.StartNew;
    for i := 0 to 50000 do
      SL.Add(IntToStr(i + 150000000));
    SW.Stop;
    Caption := IntToStr(SW.ElapsedMilliseconds);
  finally
    SL.Free;
  end;
end;
Может проход по датасету тормозит? Ещё, если добавление в визуальный компонент, то там свои тормоза от отрисовки. Добавляется именно в StringList или в какое-то Memo или ListBox?
...
Изменено: 12.07.2023, 10:31 - s62
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #478732
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62  12.07.2023, 10:26
[игнорируется]
Может проход по датасету тормозит
скорее всего именно так.
там правда чуток сложнее, я добавлюя в стринглист самописного компонента, что как он там добавляет элементы я не знаю, это еще добавляет времени.

но я кстати проверил.
строка с разделителями точно быстрее, чем проход в цикле по датасету.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #478737
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62  12.07.2023, 10:26
[игнорируется]
Добавляется именно в StringList или в какое-то Memo или ListBox?
да там у компонента метод, который принимает параметро стринглист, что он там делает с ним внутри не уверен.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #478745
s62
Скрыть профиль Поместить в игнор-лист
Участник
Неуловимый Джо [игнорируется] 

вот если к моему коду добавить ещё
Код: Delphi
1.
      Memo.Lines.Assign(SL);
то вот это действие - сколько-то секунд. Я как-то писал, что обнаружил, что c ListBox-ом быстрее: 365471
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #478767
s62
Скрыть профиль Поместить в игнор-лист
Участник
Неуловимый Джо  12.07.2023, 10:44
[игнорируется]
но я кстати проверил.
строка с разделителями точно быстрее, чем проход в цикле по датасету.
Наверное ты и сам знаешь, на всякий случай напишу. Если визуальный компонент, то при добавлении по одной записи он будет перерисовываться после каждого добавления и это добавляет тормозов. Чтобы этого не было надо вначале вызвать StringList.BeginUpdate, а когда все изменения будут внесены, вызвать StringList.EndUpdate. Можно через try ... finally на случай исключения. Это реально ускоряет в случае добавления большого количества строк поочередно.
...
Рейтинг: 1 / 0
Нравится: Неуловимый Джо
Языки программирования семейства Pascal / Как будет быстрее?
    #478792
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62  12.07.2023, 11:07
[игнорируется]
Неуловимый Джо  12.07.2023, 10:44
[игнорируется]
но я кстати проверил.
строка с разделителями точно быстрее, чем проход в цикле по датасету.
Наверное ты и сам знаешь, на всякий случай напишу. Если визуальный компонент, то при добавлении по одной записи он будет перерисовываться после каждого добавления и это добавляет тормозов. Чтобы этого не было надо вначале вызвать StringList.BeginUpdate, а когда все изменения будут внесены, вызвать StringList.EndUpdate. Можно через try ... finally на случай исключения. Это реально ускоряет в случае добавления большого количества строк поочередно.
ну тут остается надеяться что в компоненте это учтено.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #478809
s62
Скрыть профиль Поместить в игнор-лист
Участник
Неуловимый Джо  12.07.2023, 11:28
[игнорируется]
ну тут остается надеяться что в компоненте это учтено.
Почему? Ты же передаешь в процедуре в какой-то StringList. Вот у него и можно вызвать в начале BeginUpdate, а в конце EndUpdate.
Типа
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure SendArrayToStringList(Arr: array of integer; SL: TStringList);
begin
  SL.BeginUpdate;
  try
    SL.Clear;
    for i := 0 to High(Arr) do
      SL.Add(IntToStr(Arr[i]);
  finally
    SL.EndUpdate;
  end;
end;
...
Изменено: 12.07.2023, 11:45 - s62
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #478810
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62  12.07.2023, 11:43
[игнорируется]
Неуловимый Джо  12.07.2023, 11:28
[игнорируется]
ну тут остается надеяться что в компоненте это учтено.
Почему? Ты же передаешь в процедуре в какой-то StringList. Вот у него и можно вызвать в начале BeginUpdate, а в конце EndUpdate.
Типа
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure SendArrayToStringList(Arr: array of integer; SL: TStringList);
begin
  SL.BeginUpdate;
  try
    SL.Clear;
    for i := 0 to High(Arr) do
      SL.Add(IntToStr(Arr[i]);
  finally
    SL.EndUpdate;
  end;
end;
да его я тут же и создаю, на нем никаких отрисовок точно нет.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #478968
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62 [игнорируется] 

С DelimitedText тоже проблемы.
там делиметр можно только один символ, и найти подходящий трудно.

Пока не нашел )
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #479003
s62
Скрыть профиль Поместить в игнор-лист
Участник
Неуловимый Джо [игнорируется] 

Можно присвоить свойство Text и разделять строки символами CR LF.
Вроде так должно сработать:
Код: Delphi
1.
2.
3.
4.
s := '';
for i := 0 to High(StrArr) do
  s := s + StrArr[i] + #13#10;
StringList.Text := s;
...
Изменено: 12.07.2023, 14:26 - s62
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Как будет быстрее?
    #479103
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
s62  12.07.2023, 14:16
[игнорируется]
Неуловимый Джо [игнорируется] 

Можно присвоить свойство Text и разделять строки символами CR LF.
Вроде так должно сработать:
Код: Delphi
1.
2.
3.
4.
s := '';
for i := 0 to High(StrArr) do
  s := s + StrArr[i] + #13#10;
StringList.Text := s;
ок, спасибо, проверю )
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Поиск: Искать ответы на сообщение: #478716  
Пользователи онлайн (28): Анонимы (18), Barkrowler, prostozevs, Bing Bot, Yandex Bot, Redd 1 мин., Кусь 2 мин., Google Bot 4 мин., Умник-практикующий 5 мин., Разум вселенной 8 мин., S Baltiki 9 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]