![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем добрый день
мучает один вопрос - что эффективнее использовать при работе с БД загружать его в память или читать напрямую? Объясню Если нужно читать много данных из БД при запуске приложения - лучше все эти данные сперва грузить в массив или читать напрямую из файла? ДБ MS Access |
|
#2
|
||||
|
||||
|
А без чтения из памяти вообще не обойтись. Поэтому её достаточно.
|
|
#3
|
||||
|
||||
|
Так лучше грузить данные сперва в массив??
|
|
#4
|
|||
|
|||
|
На самом деле, как и всегда, все зависит от объема данных и способа и частоты их использования. Так что, давай больше информации - тогда получишь более подходящий под твою ситуацию совет.
|
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
||||
|
||||
|
Дело в том что вот на примере программы гуглмап(установочная для ПК) программа при запуске загружает больше данных и на это уходит не так много времени
А моем случае я читаю из базы 150 строк из двух колонок уходит больше времени может дело в самом БД Аксез? |
|
#8
|
||||
|
||||
|
По опыту сборки словарей на акцессовской базе "тормоза" проявляются лишь после 200000-300000 записей, да и то, от версии системного джет-провайдера это зависит и от конструкций запросов, 150 для неё - семечки, возможно, нужно пересмотреть логику работы с этими данными, без кода ведь не видно, как осуществляется доступ, что с ними происходит итд., а с другой стороны, если записей мало, то мож и база совсем не нужна, достаточно текстового файла и ...массива. Другими словами, колитесь, чего творите
|
|
#9
|
||||
|
||||
|
Вот собственно сам код который грузится после отображения окна программы
Код:
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
|
||||
|
||||
|
Да похоже база какбэ здесь и лишняя, обычный *.ini больше подходит, но вот ещё и текстовый вариант, предварительно в блокноте нужно набрать файл (здесь с названием ini.txt), примерно с таким содержанием
Цитата:
Код:
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
|
||||
|
||||
|
База не лишняя - так как далее придется перенести это на MYSQL я как бы на начальном уровне беспокоюсь что сейчас там 150 записей - что будет если она будет 15000 пользователю придется ждать 5 минут что бы программа загрузилась? вот в чем беда
|
|
#12
|
||||
|
||||
|
Стесняюсь спросить, а зачем все стопятьсот объектов типа TMarker сразу создавать, может сначало - только самые нужные, а остальные в процессе, по мере необходимости подгружать?
|
|
#13
|
||||
|
||||
|
Это один регион и все объекты хотя бы одного региона должны быть загружены - и дело в том что даже если в процессе их грузить все равно такая же проблема будет что в начале ждать что в середине какая разница
Я больше всего начинаю думать что виноват тут сама библиотека GMLIB. Так как код написан правильно. |
|
#14
|
||||
|
||||
|
A на Delphi можно сделать так чтобы грузились только те объекты которые в области видимости?? как определить поле видимости??
|