powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA, TOracleDataSet кэширование данных.
16 сообщений из 16, страница 1 из 1
DOA, TOracleDataSet кэширование данных.
    #32280891
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Подскажите как решить вот такую вот проблемку:
Есть хранимая процедурка, которая возращает курсор. Из которого при помощи TOracleDataSet выбираются данные. Опция у датасета QueryAllRecords := false;
Выборка достаточно большая, возможно нескошлько тысяь записей.
Так вот помере выборки датасет начинает раздуваться (кушать больше памяти). И концу выбори он занимает достаточно много места от 70 до 200 мегабайт все зависит от объемов выборки. Память освобождается, когда я делаю этому датасету free. Вероятний всего что это происходит из-за того что датасет кэширует выбранные данные. Так вот вопрос как избавится от этого кэширования. Порылся в хэлпи ничего не нашел.

Зарание благодарен за помощь.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280905
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
>> ... помере выборки датасет начинает раздуваться (кушать больше памяти). И концу выбори он занимает достаточно много места от 70 до 200 мегабайт все зависит от объемов выборки ...

Всё правильно: так и должно быть.
Если жалко память, то указывай явно WHERE ROWNUM ....

При QueryAllRecords = True у тебя выберутся все данные сразу (точнее, перекачаются на клиента). А так - постепенно. Кэш здесь ни при чем.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280916
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Всё правильно: так и должно быть.
>>Если жалко память, то указывай явно WHERE ROWNUM ....

>>При QueryAllRecords = True у тебя выберутся все данные сразу (точнее, >>перекачаются на клиента). А так - постепенно. Кэш здесь ни при чем.
Так вот мне надо избежать что бы он сохрнял уже полученные данные.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280919
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне надо просто получать данные из курсорав и обрабатывать их.
Если есть варинт без испольования TOracleDataSet. Подскажите.
хранимая процедура возращает
type ResultSet is Ref Cursor;
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280923
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Перепиши процедуру. Передавай в нее параметры FIRST_RECORD и LAST_RECORD. Ну и в курсоре
...
where rownum>first_record-1
and rownum<last_record
...

Только придется вызывать ее при перемещениях по датасету.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280926
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
А почему бы не обрабатывать данные на сервере?
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280930
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мдя,
это конечно решение. Но дергать кусками не охото. Т.е. надо доп проверки. Достигнут ли конец текущего блока и т.д.
Не хотелось бы так делать. Движение по дата сету только в перед т.е. всегда вызвается Next. Мне надо просто получить данные из курсора в один проход и обработать положить их в другое место.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280933
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не обрабатывать потому что они отображаюся клиенту
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280941
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
А что клиент делает с 200 мегабайтами информации???

Уж не запомнить-ли пытается?

Передавай только то, что нужно: уже подготовленные к просмотру данные.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280951
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не 200 Метров, это данные отчета с информацией о форматирование.
Отчеты могут быть достаточно большие на нескольких листах(есть отчет на 25 листах) (Excel) а на каждом листе по несколько сотен строк.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280957
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
причем в отчетах может достаточно много колонок, в среднем 10, а теперь представляшь и для каждой ячейки может быть задано форматирование, вот отсюда и 200 метров
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280959
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могу ошибаться , но в Delphi, все загруженные в TDataSet данные, остаются в оперативной памяти пока не сделать Free или Refresh, и отключить это по-моему никак нельзя. TOracleDataSet просто наследует это поведение...
Поэтому, могу посоветовать вытаскивать по одной записи, а от DBGrid отказаться...
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280966
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_kus, да ты прав в Delphi, все загруженные в TDataSet данные, остаются в оперативной памяти пока не сделать Free,TOracleDataSet просто наследует это поведение...
Про отключить я как раз и спрашиваю.
Да я и вытаскиваю по одной записи из курсора при помощи датасета. А дергать по одной записи из базы, это уж слишком.
ВBGrid не юзаю.
Все помещается в Эксэль
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32280975
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда могу посоветовать, забраться в исходники TDataSet и TOracleDataSet, найти реализацию метода Next и вставить явное удаление ненужных записей.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32281423
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Anton K
Я так и не понял в чем проблема у тебя.

>Выборка достаточно большая, возможно нескошлько тысяь записей.
Так вот помере выборки датасет начинает раздуваться (кушать больше памяти). И концу выбори он занимает достаточно много места от 70 до 200 мегабайт все зависит от объемов выборки.
А как должно быть? Ты выбираешь с сервака 200М данных куда? В память клиентской машины. Вот она и занимается.

>Память освобождается, когда я делаю этому датасету free.
Ну дык и в чем проблема? Если бы не освобождалась, тогда да, а так...

Почему бы (если хочешь экономить память) не отказаться от Экселя, и не сваять отчет самому - тогда и рулить можно гораздо большим. Например порциями закачиваемой инфы.
...
Рейтинг: 0 / 0
DOA, TOracleDataSet кэширование данных.
    #32281799
Anton K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кому интересно, проблему решил воспользовавшись TOracleQuery. Оне не кэширует данные при выборе из курсора...Как говориться rtfm - надо было внимательней делать.
Using a cursor variable as a TOracleQuery
Because a cursor variable is equivalent to a TOracleQuery with a select statement, DOA implements the cursor variable type as a TOracleQuery.
Хотя они предлагают работать с курсором и на базе TOracleDataSet, просто граница между ними не очень хорошо определена. Это меня и сбило с толку.

Всем спасибо.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA, TOracleDataSet кэширование данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]