![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Растет память, блин....ADO+Access
Raduga © (2003-10-29 10:52:00)
Записываю в mdb-файл данные посредством sql( insert ....).
Данные записываются автоматически по таймеру. И заметил, что размер моей проги в памяти постоянно увеличивается. Как с этим бороться. Использую ADO (Jet 4.0).
Raduga (2003-10-30 11:29:00) [1]
Да уж... апдейт на 25 метров тянет.
Начальник меня повесит :)
схожу лучше в магазин и компашку с Делфями 6(7) куплю, давно собирался на них переходить , да к 5 как то привык.
bushmen (2003-10-30 10:54:00) [2]
>Raduga
Ты сначала скачай с сайта Borland update"s и посмотри результат.
sniknik (2003-10-30 10:41:00) [3]не знаю, сделал то же (только ложит и ничего больше, как ты написал, но без расчетов, естественно), размер 7080-6900-6884 по разному, растет только стачала дальше пляшет вокруг установившегося размера. на ночь не оставлял :о) но около полчаса оно работало.
система w2k sp4, Jet 4 sp7, delphi 7 (апдейты только на хелпы по IB, думаю не влияет ;о)).
в обшем хочеш пришлю скомпиленную узнаеш что виновато дельфи или система. (если у тебя скомпиленное на 7 дельфи будет вести себя по другому...)
а еше почитай что пишут (и подобное часто) про ADO в d5.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1067433093&n=1
Raduga (2003-10-30 07:35:00) [4]
Оставлял на ночь прогу работать...
Размер увеличился до 28 метров.
Raduga (2003-10-29 16:06:00) [5]
Delphi 5 (без Update), XP, Jet 4.0 (тоже без SP).
На диске метр, в памяти 9 с хвостиком.
Динамика роста положительная :). В среднем 4 кб в 5-6 сек. Занимаемая память не падает. (Сегодня на ночь оставлю- тестить).
Рост занимаемой памяти отображается в диспетчере задач.
sniknik (2003-10-29 15:34:00) [6]
если делал то почему не написал об этом?
а также о версиях, и системе. вообше ты заметил сколько памяти занимает твоя прога и ее размер на диске? видел разницу, память под нее система выделяет ровно столько сколько нужно. (исключение для запакованых программ)
и как растет? время, динамика роста, совсем не понижается? информацию вытягивать нужно?
это никому кроме тебя не нужно, так что постарайся, опиши подробнее. (у меня к примеру все ok с памятью и ее ростом)
Raduga (2003-10-29 15:16:00) [7]
>sniknik © (29.10.03 15:09) [16]
>// dm.ADOConnection1.Execute(comstr,RecordAffected,[eoExecuteNoRecords]);
не меняя остальной код и проверь, растет размер?
Уже делал. Если комментирую данную строку, то размер не растет...
sniknik (2003-10-29 15:09:00) [8]
>>ошибку запроса давать изза floattostr(now)
>Не дает.
а разделитель целой и дробной части в системе что стоит? может тебе повезло и стоит точка но прикинь что будет на другой машине где запятая? простопроанализируй получившийся запрос.
>>ведь это размер твоей проги растет
>Вот именно моей проги. А моя прога не занимает памяти, чтоли?
ADO это COM обьект которым ты управляеш, размер твоей проги от него не зависит (если только он данные тебе не передал.. т.д.), поэтому дели общую память системы и твоей проги.
> Просто если размер моей проги будет постоянно расти, ...
не должен, не от этого куска программы во всяком случае.
может конечно у тебя какието старые компоненты/дельфи/jet поставь последние/апдейты на всякий случай.
и кстати легко проверить, сделай так
// dm.ADOConnection1.Execute(comstr,RecordAffected,[eoExecuteNoRecords]);
не меняя остальной код и проверь, растет размер?
Raduga (2003-10-29 14:41:00) [9]
>sniknik © (29.10.03 14:32) [13]
>ошибку запроса давать изза floattostr(now)
Не дает.
>ведь это размер твоей проги растет
Вот именно моей проги. А моя прога не занимает памяти, чтоли?
А в проге только в таймере что-то и происходит (в данном случае запись в базу). Просто если размер моей проги будет постоянно расти, то в один прекрасный момент вылезет сообщение о недостатке памяти и т.д...
Raduga (2003-10-29 14:34:00) [10]
Может Jet не напрямую пишет в таблицу, а сначала в кэш, а потом как он заполнится скидывает в таблицу? Хотя сразу после запуска моей проги, открываю Аксесом файл, куда пишется, то там уже есть новые значения.
sniknik (2003-10-29 14:32:00) [11]
а с чего ты взял что это ADO виновато? ведь это размер твоейпроги растет (тока обратил внимание), а не память используемая системой и ADO в частности.
в приведенном коде ничего криминального нет (кроме что именно так не скомпилится изза "1 "и будет ошибку запроса давать изза floattostr(now) (нужно разделитель дробной части менять)).
а так все зашибись (память теряется не в 17 а в 27 строке ;о))
http://podgoretsky.com/ftp/Language/nps/idioms.html
Raduga (2003-10-29 13:30:00) [12]
>Vlad © (29.10.03 13:19) [11]
спасибо за объяснение насчет 17 строки :).
Я вот не знал (сделайте хоть специальный раздел, где расшифровываются различные сокрашения - типа словарь спец символов и сокращений :)).
А код такой:
form1.Timer1Timer(Sender: TObject);
var comstr:string;
RecordAffected:integer;
begin
comstr:="insert into AlarmEvents (AEchanelGaugeID,AEDataTimeValue,AELevelValue)";
comstr:=comstr+"VALUES ("1","+floattostr(now)+","+inttostr(val)+")";
dm.ADOConnection1.Execute(comstr,RecordAffected,[eoExecuteNoRecords]);
end;
val -некоторое вычисляемое значение
Vlad (2003-10-29 13:19:00) [13]
> Raduga (29.10.03 13:10) [10]
> Никто не знает причину, да?
Как же ее узнать, если ты толком не объяснил как происходит сие действие.
PS 17-я строка означает - "приведи код" :)))
Raduga (2003-10-29 13:10:00) [14]
Никто не знает причину, да?
Raduga (2003-10-29 11:43:00) [15]
>Плохиш_ (29.10.03 11:38) [8]
Что за 17 строка?
Плохиш_ (2003-10-29 11:38:00) [16]
>Raduga (29.10.03 11:29) [6]
читай до конца Плохиш_ (29.10.03 11:22) [3]
Raduga (2003-10-29 11:34:00) [17]
>sniknik © (29.10.03 11:26) [5]
ADOConnection.
Raduga (2003-10-29 11:29:00) [18]
>Плохиш_ (29.10.03 11:22) [3]
Нет не правильно.
Слово автоматически тебе о чем- нибудь говорит?
Если "да" то не задавай таких вопросов, в противном случае поясняю: программа работает без участия человека и сохраняет в базу данные через определенный интервал времени.
sniknik (2003-10-29 11:26:00) [19]
а ADOConnection используеш, или строку у query прописываеш? просто без явного указания коннекта он в фоне создается а дальше на усмотрение ADO освобождается когда ему удобно будет (и с условием что его больше ничего не держит).
вообше это не обязательно глюк, даже после уничтожения обьекта ADO может "придерживать" память на всякий случай, а вдруг интенсивная работа и опять создавать его будут, так скорость обеспечивают.
Sandman25 (2003-10-29 11:25:00) [20]
Query один, я надеюсь, и с параметрами?
Тогда непонятно.