Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.13;
Скачать: CL | DM;

Вниз

Помогите отучить 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
6-39806
UnderSun
2002-02-21 18:22
2002.05.13
Подскажите как программно соединится с Инетом по VPN


6-39816
Relaxoid
2002-02-28 15:37
2002.05.13
Где достать исходники nbtstat?


1-39691
Johnmen
2002-04-29 12:40
2002.05.13
TEdit и звуковые эффекты


6-39820
Piriken
2002-02-22 18:14
2002.05.13
Правка HTML-документа


3-39680
QWest
2002-04-17 10:59
2002.05.13
Вопрос по FoxPro.