![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TOracleDataSet ;из DOA ;жрет память и не отдает. Как исправить ? [D5, Oracle]
maxi © (2002-06-29 14:44:00)Привет мастера....
У меня прога почему то жрала память, безвозвратно.
Стал разбиратьться - нашел - у меня в таймере стоит примерно
следующее :
...
OracleDataSet1.Close;
OracleDataSet1.Open;
...
Каждую секунду я получаю данные в курсор. Вроде бы делаю Close, но память всеравно кушается. Пробовал делать так:
...
OracleDataSet1.Open;
... - делаю тута что нужно
OracleDataSet1.Close;
...
Все равно ни вкакую - память тает на глазах. Если делать запрос к базе каждую секунду, то сжор памяти составляет 100 кБайт в минуту !!!!!!!!! Если сделать таймер пореже раза в 2 - память
жраться будет реже, тоже раза в 2 (проверял).
Может я что-то забыл сделать ? Может как-то надо старые данные не просто через Сlose уничтожать ? или еще чего ?
Подскажите, пожалуйста ....
maxi (2002-06-29 17:17:00) [1]Ура !!! Удалось стабилизировать пожирание памяти.
Все дело в том, что если делать вот так :
OracleDataSet1.ClosеAll;
OracleDataSet1.Open;
То всё становится нормально. Почему-то ... :о)
Как говорится если работает - не лезь... :о)
Хотя всё равно непонятно - даже если у меня два раза выполнялась бы строка OracleDataSet1.Open недолжно было бы происходить никакого перераспределения ресурсов. Но всё же, CloseAll наверно правильней использовать - наверняка эта процедура подчищает память за набором данных ....
maxi (2002-06-29 15:49:00) [2]А куда девается старый курсор, если я делаю Close?
И как освобождается место из под старого курсора ?
Никто не знает ?
kaif (2002-06-29 15:15:00) [3]Вряд ли в компоненте такая явная ошибка. Проверь, может Oracle память жрет... (если он на той же машине стоит). Может, он порождает каждый раз новый курсор (до конца транзакции). Поиграй с транзакцией... Но это все предположения.