Внесение данных в StringGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Внесение данных в StringGrid

Сообщение skobanev » 27.12.2018 11:23:42

Добрый.
Есть скрипт:
Код: Выделить всё
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  tme: TDateTime;
  i:Integer;
begin
  tme:=now;
  StringGrid1.Clean;
  for i:=1 to 10000 do StringGrid1.InsertRowWithValues(i,['Первая','Вторая','Третья','Четвертая','Пятая']);
  ShowMessage(TimeToStr(now-tme));
end;               


В общем время выполнения данного скрипта: 8 сек.
Как уменьшить время выполнения?
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Внесение данных в StringGrid

Сообщение alexs » 27.12.2018 11:40:50

Код: Выделить всё
  StringGrid1.BeginUpdate;
  StringGrid1.EndUpdate;
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Внесение данных в StringGrid

Сообщение skobanev » 27.12.2018 12:23:55

alexs Спасибо.
Но все равно 20 000 строк - около 5 сек
10 000 - за 1 сек.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Внесение данных в StringGrid

Сообщение Mikhail » 27.12.2018 12:45:06

skobanev писал(а):alexs Спасибо.
Но все равно 20 000 строк - около 5 сек
10 000 - за 1 сек.

Если не секрет, зачем это вообще нужно?
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Внесение данных в StringGrid

Сообщение skobanev » 27.12.2018 13:17:19

Mikhail писал(а):Если не секрет, зачем это вообще нужно?


В общем. Рабочая прога. Копи центр. Первая версия писалась на ДБГридах, процедурах и функциях. Самописный ООП использовался крайне редко.
Долго на прогу не обращал внимания, понял что надо дописывать/переделывать. Начал. В одном месте исправляешь, вылазиют косяки в другом.

Теперь хочу все переписать, используя объекты, методы и аттрибуты. Чтоб все в одном месте было. Данных за года накопилось много.

StringGrid использую вместо DBGRID, только данные берутся уже из структурированного объекта, с которым можно работать. На сегодняшний день уже под 10 000 строк.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Внесение данных в StringGrid

Сообщение Mikhail » 27.12.2018 13:30:06

skobanev писал(а):StringGrid использую вместо DBGRID, только данные берутся уже из структурированного объекта, с которым можно работать.

ИМХО, плохое решение...
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Внесение данных в StringGrid

Сообщение skobanev » 27.12.2018 13:32:10

Mikhail писал(а):ИМХО, плохое решение...

А чем заменить ?
Или стараться внедрить данные из объекта в DBGrid ?
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Внесение данных в StringGrid

Сообщение Mikhail » 27.12.2018 13:38:21

skobanev писал(а):
Mikhail писал(а):ИМХО, плохое решение...

А чем заменить ?
Или стараться внедрить данные из объекта в DBGrid ?


Я ведь правильно понимаю, у Вас данные находились в СУБД и работали с ними через DBGrid, а теперь вместо БД у Вас свой велосипед и работа через StringGrid?
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Внесение данных в StringGrid

Сообщение skobanev » 27.12.2018 13:42:30

В общем для простоты я из БД собираю в нужной мне форме в объект. (фильта, поиск......)
А теперь мне этот объект нужно вывести на форму.
10000 строк собираются в объект с обработкой - мгновенно. Выводятся за 1-2 сек.
Причем это с 5 колонками. У меня полей на главной форме 8. А это увеличение до 2-3 сек на вывод.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Внесение данных в StringGrid

Сообщение Mikhail » 27.12.2018 13:48:44

skobanev писал(а):В общем для простоты я из БД собираю в нужной мне форме в объект. (фильта, поиск......)
А теперь мне этот объект нужно вывести на форму.
10000 строк собираются в объект с обработкой - мгновенно. Выводятся за 1-2 сек.
Причем это с 5 колонками. У меня полей на главной форме 8. А это увеличение до 2-3 сек на вывод.

Если честно, то не очень понял. :? Т.е. Вы вычитываете из БД значительный объем с помощью какого-то запроса, затем сохраняете его результаты в память в виде какой-то структуры, затем копируете это в String Grid?
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Внесение данных в StringGrid

Сообщение skobanev » 27.12.2018 13:51:50

да, именно так. Ивините, я плохо могу объяснять.
Последний раз редактировалось skobanev 27.12.2018 13:55:22, всего редактировалось 1 раз.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Внесение данных в StringGrid

Сообщение Vadim » 27.12.2018 13:54:29

И ещё больше вызывает вопросов - зачем 10 000 строк выводить на экран. Может ли плохо тренированный человек воспринимать столько информации?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Внесение данных в StringGrid

Сообщение Mikhail » 27.12.2018 13:58:56

skobanev писал(а):да, именно так.

Для чего нужна промежуточная стадия хранения в собственной структуре, на стороне СУБД нельзя решить эти задачи? БД удаленная?

У Вас два копирования и тройной объем по памяти получается.

Можно использовать DrawGrid, но эффективность будет зависеть, от структуры данных, которую Вы там реализовали. В любом случае хранить в StringGrid тысячи и тем более десятки тысяч строк бессмысленно, человек не может работать с таки объемами.
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Внесение данных в StringGrid

Сообщение skobanev » 27.12.2018 14:00:50

Тут нам просто так хочется. Уже тема у нас в конторе обсуждалась. Вот хочется и все.
DrawGrid я попробую. А с объектом уже легче работать. Что все в одном месте.
Да и логику от визуализации хочется отсечь.
skobanev
новенький
 
Сообщения: 33
Зарегистрирован: 24.02.2016 23:55:01
Откуда: Ростов-на-Дону

Re: Внесение данных в StringGrid

Сообщение Mikhail » 27.12.2018 14:04:21

skobanev писал(а):DrawGrid я попробую.

Там самому надо каждую ячейку рисовать, если что. :wink: И соответственно в своей структуре данных нужно что-то типа курсора организовать.
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 23

Рейтинг@Mail.ru