GoodWin |
Отправлено: 09.10.2006, 12:27 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 50
|
Здраствуйте.
Я пользуюсь базами Access. Подключаюсь через TADOConnection.Создаю таблицу( TADOTable ), прописываю строку подключения и открываю ее <имя таблицы>->Active = true.
Во время ее выполнения фиксирую что количество свободной оператиивной памяти упало на 150 метров. Сама база весит на HDD около 60 метров. Т.е. очевидно что вся база загружается в оперативку. Так вот, собственно вопрос: как сделать так, чтобы этого не случалось, чтобы работа шла непосредственно с базой на винте, а не в оперативке?
Для малых баз это не так критично, а вот для больших... |
|
olegenty |
Отправлено: 09.10.2006, 12:44 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
работа с таблицей таким способом означает, что фоново выполняется запрос типа
SQL | select * from [имя таблицы]
|
это не есть гуд, потому что зачем клиенту ВСЕ (предположим, что их немного — порядка единиц миллионов) записи из таблицы? что он будет с ними делать?
вывод — тебе нужно переходить на работу с запросами (TADOQuery). клиенту за раз бывает надо порядка единиц сотен записей. вот столько он и должен получать.
|
|
GoodWin |
Отправлено: 09.10.2006, 16:21 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 50
|
Интересно, а зачем тогда вообще необходимо свойство CacheSize?? Я как понимаю, позволяет реже обращаться к источнику данных, использую кэш в оперативке.
И если все данные в оперативке, то почему так все медленно работает и все время обращается к винту?
Или я чего то не понимаю ?
У меня прога работает с базами материалов 3D объекта и когда происходит обновление материала, то приходится использовать Filter для поиска , но это работает намного медленне, чем то же реализовал я, создав в памяти класс строки в базе.
Просто неохота перебирать все исходники по новой и тратить пару дней для перевода на TADOQuery ( не я реализовывал, поэтому так долго предпологаю ).
Может есть какая-нибудь возможность отключить кеширование всех данных в TADOTable и разрешить ему обращаться только напрямую у винту.
Прошу извинить за ламерские вопросы, но с БД работал пока тока опосредованно.
|
|
olegenty |
Отправлено: 10.10.2006, 07:13 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
1. CacheSize — это ДОЗА (порция), размером в которую записи догружаются на клиента
2. Так медленно и к винту, потому что записи в ВИРТУАЛЬНОЙ памяти, а не в чистом виде в оперативной. Про своп никогда не слышал? Про файл подкачки? Так вот твои записи в файле подкачки, а он на винте. Отсюда и тормоза.
3. Filter надо заменить на WHERE в TADOQuery — получишь увеличение скорости работы в разы (иногда — в десятки и даже сотни раз).
|
|
GoodWin |
Отправлено: 10.10.2006, 09:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 50
|
Все доступно и понятно, спасибо.
При ближайшей возможности буду переводить на TADOQuery.
С уважением, GoodWin. |
|