Форум: "Базы";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизПомогите отучить ADO сжирать память ! Найти похожие ветки
← →
Socrat (2002-04-16 09:03) [0]Возникла проблема. При открытии запроса, который содержит объединение двух Access"oвских таблиц, память начинает утекать маленькой речкой, за 5 минут, 500 мег утерялось, а запрос так и не открылся. В таблицах около 250 000 записей.
Соединение пытаюсь устанавливать следующее:
Provider=MSDataShape.1; Data Source=DBMS.mdb;Mode=ReadWrite;Persist Security Info=True;Data Provider=Microsoft.Jet.OLEDB.4.0
Помогите, пожалуйста
← →
Belov (2002-04-16 09:26) [1]посмотри тип полей, который у тебя возвращаются в запросе
← →
wicked (2002-04-16 10:28) [2]
> В таблицах около 250 000 записей
скока-скока?... зачем тебе столько и сразу?... юзеру показывать?... так никакой памяти не хватит...
могу только предложить использовать серверные курсоры (св-во CursorLocation = clUseServer), но это отдельный разговор...
← →
Socrat (2002-04-16 10:47) [3]Belov : Я возвращаю 15 полей из одной и 15 из другой таблицы. Типы данных : числовые и текстовые, дата.
wicked : Чем мне помогут серверные кусоры
Обрисую ситуацию: необходимо сделать поиск по записям. 250000 записей это основной набор данных, каждый месяц будут приходить обновления. Надо разработать программу аккумулирующию в себе все данные и производящую поиск. Попытался перекидывать в Paradox, но все происходит очень медленно и размер файла, по какой то причине, ограничивается 255 мегами. Пока оптимального решения так и не нашел.
← →
Socrat (2002-04-16 10:54) [4]По какой-то причине ADO пытается сразу отхватить 150-180 метров просто при попытке открытия ADOTable.
← →
Mike S (2002-04-16 10:59) [5]> могу только предложить использовать серверные курсоры
А разве Access их поддерживает.
Может ADO тянет всю базу себе.
← →
wicked (2002-04-16 12:11) [6]2 Mike S ©
имхо да... хотя я не пробовал и работал только с клиентскими...
2 Socrat
так ты их хочешь аккумулировать или выбирать на показ?... ADO ест память только тогда, когда ты в adoquery/adodataset"е делаешь select твоих данных...
для аккумулирования/обновления данных вовсе не обязательно выбирать данные, достаточно использовать adocommand и операции sql...
← →
Севостьянов Игорь (2002-04-16 12:50) [7]Да-да-да при CursorLocation = clUseClient он выкачивает данные из SELECT на клиента (как бы кеширует), ну вот и думай а надо ли выкачивать все это клиенту и искать( производящую поиск) или же можно это сделать на сервере ?
← →
Anatoly Podgoretsky (2002-04-16 12:58) [8]В при CursorLocation = clUseServer в воздух?
Это же не сервер!
← →
wicked (2002-04-16 13:09) [9]
> В при CursorLocation = clUseServer в воздух?
> Это же не сервер!
не обязательно... CursorLocation = clUseServer диктует провайдеру, что нужно использовать курсор на стороне сервера...
а если курсор динамический (CursorType = ctDynamic), то имхо сервер даже не трудится выбирать всё и тот час же, а выдаёт записи по мере продвижения клиента по набору данных... если же курсор кейсетовый (CursorType = ctKeyset), то сервер формирует и кеширует только набор ключевых полей, сами записи выдаёт опять же по мере обращения клиента...
← →
roottim (2002-04-16 15:17) [10]+Anatoly Podgoretsky © (16.04.02 12:58)
понятия скл сервера здесь нет.. это файл сервер.. и для формирования курсора он всеравно использует клиента... только работать с UseServer он будет не совсем корректно!
← →
Socrat (2002-04-17 03:25) [11]Большое спасибо мастерам за ответы и неоценимую помощь.
Что выходит : только при использовании курсора KeySet, набор данных позволил вывести себя в гриде, загрузка памяти стала достигать 38 метров, поиск по всей базе проходит в 5-8 секунд с 2-5 критериями. Просто замечателльно, хотя есть потенциал для оптимизации.
← →
wicked (2002-04-17 09:38) [12]2 Socrat
гы-гы... а ты Filter, Sort или Locate примени... тогда поймёшь, почему серверные курсоры не рекомендуются...
← →
alex_eliseev (2002-04-17 11:10) [13]А почему собственно ADOTable, а не ADODataSet или ADOQuery?
← →
Socrat (2002-04-18 07:07) [14]alex_eliseev
Помимо выборки просто нужно еще обеспечить импорт данных в Access. ADOTable мне показался самым удобным вариантом. Или я ошибался ?
← →
sniknik (2002-04-18 09:04) [15]по официальным данным и ADOTable и ADOQuery устарели и оставлены дл "облегчения перехода". рекомендуют к использованию ADOCommand и ADODataSet.
← →
Socrat (2002-04-18 09:18) [16]sniknik
Вот как, спасибо за информацию, надо рассмотреть возможность перехода на них.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c