![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с памятью [D7, Access]
VadimSpb © (2005-12-04 11:22:00)Добрый день!
Возникла проблема, связанная с памятью.
Суть проблемы: Если подключаемся через ADOTable к таблице, где 60000 записей, размер программы в памяти увеличивается на ~6 МБ, если через запрос на объединение с другими таблицами (ADOQuery) - ~60 МБ.
Собственно на запросы пришлось перейти, т.к. если поля в ADOTable лукапить с другой таблицей, они потом не сортируются. Но в результате попал на память!
Таких запросов несколько + увеличится число записей. В общем такие расходы памяти неприемлемы.
Как решить эту проблему?
sniknik (2005-12-04 17:58:00) [21]> Fay © (04.12.05 17:38) [6]
основная "претензия" к ADOTable, т.к. при переходе с BDE думают стереотипами, раз есть компонент значит и работать также... и нарываются на грабли. после возмущаются "тормознутостью" всего ADO.
а это совсем другой компанент, усеченный и ограниченный ADODataSet. хотя, если знать что к чему через него можно и запросы выполнять... но это "слегка" через задницу.
ADOQuery уже чисто за компанию, и за то рушит логику ADO, где все делится на запросы возвращающие данные и нет. для возвращающих ADODataSet для не возвращающих ADOCommand. а почему для оних запросов нужен ADODataSet для других не отличающихся по смыслу ADOQuery а для третих ADOStoredProc (кстати забыл, тоже нафиг в корзину) понять уже труднее. для чего делить если с точки зрения ADO это одно и тоже?
sniknik (2005-12-04 17:48:00) [22]> что в ряде случаев ADOQuery предпочтительнее.
по сравнению с чем? с ADOTable? двумя руками за.
по сравнению с ADODataSet? так ADOQuery это и есть ADODataSet, слегка подрихтованный молоточком по кузову. и не в сторону улутшений, а в сторону придать кузову "жигульную" форму.
> Какие явные преимущества DataSet?
DataSet основа всего, в том числе и Table(BDE)/ADODataSet, убери его и все рухнет. достаточно преимуществ?
> Все-таки, как с курсорами на сервере?
в смысле "как"? обычно, но используя их теряеш часть специфическую для локальных. а сортировка на локали судя по всему тебе нужна... в принципе можно попробовать обойтись индексами, но тут надо конкретнее в задачу "вникнуть".
да еще...
+ сожги Архангельского.... ;)
Fay © (04.12.05 17:38) [6]
> Я на этом форуме не первый год, и пока ни разу не видел аргументов
писал. не раз. видимо "разминулись".
Fay (2005-12-04 17:38:00) [23]>> надоело повторять одно и тоже
Что именно повторять?
Не понимаю о чём идет речь. Я на этом форуме не первый год, и пока ни разу не видел аргументов к заявлениям вида "избавься от. ADOTable/ADOQuer (вообще сними с палитры компонент и забудь про них)".
VadimSpb (2005-12-04 16:44:00) [24]Форд продается уже полностью укомплектованным :-))
Нужны реальные доводы. Я читал у Архангельского, что в ряде случаев ADOQuery предпочтительнее. Разумеется надо отталкиваться от степени разумной необходимости. Какие явные преимущества DataSet?
Все-таки, как с курсорами на сервере?
sniknik (2005-12-04 16:19:00) [25]Fay © (04.12.05 15:40) [2]
а просто так. чтоб было. (надоело повторять одно и тоже) лучше ты обьясни, зачем они тебе нужны? что в них такого особенного, чтобы за них так упорно держатся?
один наводящий вопрос. ты когда машину (форд например) новую покупаеш, кузов и управление со старой переставляеш? (жигулей например). потому как привык к ним. если так, то ничего страшного в использовании этих компонент для тебя нет.
VadimSpb (2005-12-04 16:17:00) [26]Поставил курсор на сервер и все значительно улучшилось.
Если будет достаточно пользователей-клиентов, то не "ляжет" ли сервер, если все будет в его памяти?
Чем будет лучше DataSet? Применил его вместо ADOQuery и все осталось по прежнему.
Fay (2005-12-04 15:40:00) [27]2 sniknik © (04.12.05 11:38) [1]
> избавься от. ADOTable/ADOQuer
Почему? Давно хотел узнать...
sniknik (2005-12-04 11:38:00) [28]> Как решить эту проблему?
сменить логику с локально файловой на клиент серверную... и не только в программе, а в основном у себя в мозгах.
так например какой смысл тащить на клиента все 60000 записей? (в случае с jet com обьект обрабатывающий запросы можно рассматривать как sql сервер, впрочем он позволяет работать и локально)
в общем надо переделывать так чтобы вибиралось только нужное количество записей (а не использовать для этого фильтры после полной выборки), глобальные расчеты, обработки данных делались на сервере, и т.д.
+ избавься от. ADOTable/ADOQuer (вообще сними с палитры компонент и забудь про них) пользуйся ADODataSet/ADOCommand
(это в качестве дружеского совета. не по теме)