Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.03.2017, 14:29
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание Что эффективнее использовать

Всем добрый день
мучает один вопрос - что эффективнее использовать при работе с БД
загружать его в память или читать напрямую?

Объясню
Если нужно читать много данных из БД при запуске приложения - лучше все эти данные сперва грузить в массив или читать напрямую из файла?

ДБ MS Access
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #2  
Старый 25.03.2017, 17:20
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

А без чтения из памяти вообще не обойтись. Поэтому её достаточно.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 25.03.2017, 17:54
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Так лучше грузить данные сперва в массив??
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #4  
Старый 25.03.2017, 18:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

На самом деле, как и всегда, все зависит от объема данных и способа и частоты их использования. Так что, давай больше информации - тогда получишь более подходящий под твою ситуацию совет.
Ответить с цитированием
  #5  
Старый 25.03.2017, 19:04
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Electronic_Arts
Так лучше грузить данные сперва в массив??
Нужно задать себе вопрос - а для чего собсно разрабатывались движки баз данных, и ответ на него прям в названии: для комфортной, максимально быстрой работы с данными, ну и зачем тогда лишняя прокладка ввиде массива нужна, только время при выполнении на загрузку в оперативку тратить, "лазать" по базе всёравно быстрее будет, заточена она под энто дело, а так это похоже на прилаживание карбюратора под инжектор, в принципе можно, но быстро не поедешь
Ответить с цитированием
  #6  
Старый 25.03.2017, 19:14
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Electronic_Arts
Так лучше грузить данные сперва в массив??
Данные всегда есть в БД. Делать их копию в массиве не нужно.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 25.03.2017, 23:30
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Дело в том что вот на примере программы гуглмап(установочная для ПК) программа при запуске загружает больше данных и на это уходит не так много времени

А моем случае я читаю из базы 150 строк из двух колонок уходит больше времени может дело в самом БД Аксез?
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #8  
Старый 26.03.2017, 00:19
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

По опыту сборки словарей на акцессовской базе "тормоза" проявляются лишь после 200000-300000 записей, да и то, от версии системного джет-провайдера это зависит и от конструкций запросов, 150 для неё - семечки, возможно, нужно пересмотреть логику работы с этими данными, без кода ведь не видно, как осуществляется доступ, что с ними происходит итд., а с другой стороны, если записей мало, то мож и база совсем не нужна, достаточно текстового файла и ...массива. Другими словами, колитесь, чего творите
Ответить с цитированием
  #9  
Старый 26.03.2017, 01:37
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Вот собственно сам код который грузится после отображения окна программы
Код:
var
  I: Integer;
  Marker: TMarker;
  sub_icon, path: string;
begin
  path := ExtractFilePath(application.ExeName);
  Form1.GMMarker1.Clear;
  Form1.Sub_Query.First;
  if Form1.Sub_Connection.Connected then
  begin
    for I := 1 to Form1.Sub_Query.RecordCount do
    begin
        Application.ProcessMessages;
        Marker := Form1.GMMarker1.Add;
        Marker.Position.Lat := Marker.Position.StringToReal(Form1.Sub_Query.FieldByName('Sub_lat').Value);
        Marker.Position.Lng := Marker.Position.StringToReal(Form1.Sub_Query.FieldByName('Sub_lng').Value);
          if FileExists(path + '\IMAGES\'+Form1.Sub_Query.FieldByName('ICON_NAME').Value+'.png') then
           begin
            sub_icon:= path + '\IMAGES\'+Form1.Sub_Query.FieldByName('ICON_NAME').Value+'.png';
           end else
            begin
              sub_icon:= path + '\IMAGES\NN.png';
            end;
        Marker.Icon := sub_icon;
        Form1.Sub_Query.Next;
      end;
    end;
__________________
Нет ничего не возможного. Вопрос только во времени...

Последний раз редактировалось Electronic_Arts, 26.03.2017 в 01:40.
Ответить с цитированием
  #10  
Старый 26.03.2017, 12:30
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да похоже база какбэ здесь и лишняя, обычный *.ini больше подходит, но вот ещё и текстовый вариант, предварительно в блокноте нужно набрать файл (здесь с названием ini.txt), примерно с таким содержанием
Цитата:
10,10,N1
10,20,N2
10,30,N3
10,40,N4
10,50,N5
10,60,N6
первое число до запятой это Marker.Position.Lat, второе - Marker.Position.Lng и после последней - имя иконки, а дальше так
Код:
var
 i: integer;
 Marker: TMarker;
 path: string;
 sl, st: TStrings;
begin
 path:= ExtractFilePath(Application.ExeName);
 Form1.GMMarker1.Clear;
 sl:= TStringList.Create;
 st:= TStringList.Create;
 st.Delimiter:=',';
 sl.LoadFromFile(path + '\ini.txt');

 for i := 0 to sl.Count-1 do
  begin
   st.DelimitedText:= sl[i];
   Application.ProcessMessages;
   Marker:= Form1.GMMarker1.Add;
   Marker.Position.Lat:= Marker.Position.StringToReal(st[0]);
   Marker.Position.Lng:= Marker.Position.StringToReal(st[1]);
   if FileExists(path + '\IMAGES\' + st[2] + '.png') then
    Marker.Icon:= path + '\IMAGES\' + st[2] + '.png'
     else
      Marker.Icon:= path + '\IMAGES\NN.png';
end;
sl.Free;
st.Free;
end;
должно работать, вдруг такое больше подойдёт
Ответить с цитированием
  #11  
Старый 26.03.2017, 13:30
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

База не лишняя - так как далее придется перенести это на MYSQL я как бы на начальном уровне беспокоюсь что сейчас там 150 записей - что будет если она будет 15000 пользователю придется ждать 5 минут что бы программа загрузилась? вот в чем беда
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #12  
Старый 26.03.2017, 13:42
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Стесняюсь спросить, а зачем все стопятьсот объектов типа TMarker сразу создавать, может сначало - только самые нужные, а остальные в процессе, по мере необходимости подгружать?
Ответить с цитированием
  #13  
Старый 26.03.2017, 13:51
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Это один регион и все объекты хотя бы одного региона должны быть загружены - и дело в том что даже если в процессе их грузить все равно такая же проблема будет что в начале ждать что в середине какая разница

Я больше всего начинаю думать что виноват тут сама библиотека GMLIB. Так как код написан правильно.
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #14  
Старый 26.03.2017, 20:30
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

A на Delphi можно сделать так чтобы грузились только те объекты которые в области видимости?? как определить поле видимости??
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter