powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / pFibDataset - скинуть буфер на диск для экономии памяти
25 сообщений из 80, страница 1 из 4
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952187
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую,

Есть ли в pFibDataset штатное средство, чтобы скинуть буфер на диск, какого бы размера он там ни был, и потом отображать его без существенных затрат памяти, в гриде, например? Да еще и отцепившись от базы в дальнейшем. Есть возможность скинуть содержимое на диск, но вот пользоваться этим как, кроме как обратно целиком закачать с тем же самым расходом памяти... Писать свой датасет, который читает из этого файла, только, или есть что-то штатное в FibPlus, а я в упор не вижу этого?

Есть CacheModelOptions, который при выполнении определенных условий вживую будет лазить в базу за данными, храня в памяти ограниченное кол-во записей, и вроде замечательно выглядит, но не всё гладко там, например с recno, может, еще что-то какие глюки полезут... Да и от базы отцепиться хотелось бы.

Спасибо.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952297
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тест на эрудицию, или просто лень смотреть документацию и исходники?
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952302
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрел, туплю. Подскажите, если не сложно.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952350
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov,

есть кое-что, но годных штатных средств именно в форме объявленных хотелок - нет.

Можно воспользоваться средствами компонентов отображения: гриды EhLib, DevEx. У первого - механизм "драйверов", у второго - наследник TcxCustomDataSet. И тот и другой просты в понимании и реализации.

Можно также TVirtualStringTree, но с ним гемора куда больше, чем у двух названных выше.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952432
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше подробнее сформулировать задачу.

Потому что "скинуть датасет на диск" и "для экономии памяти" -
это разные задачи (и для разных целей, обычно).

MemoryDataset-ы можно использовать, например?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952437
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам
MemoryDataset-ы можно использовать, например?

Для экономии памяти... :)
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952441
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ> Для экономии памяти... :)

Их можно сбрасывать на диск и загружать кусками. :)
Фибы (старых версий, на счёт новых ХЗ) так не умеют.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952447
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

да ну, хрень какая-то. Не знаю что, не знаю зачем.

Что за задача - "в гриде без существенных затрат памяти"?
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952454
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

Запрос в tpFibdataset выполняется для расчета сумм, то есть придется отфетчить все записи, и для отображения результата запроса в гриде в приложении. В стандартном варианте tpFibDataset загрузит все считанные с сервера данные в оперативную память, а память у нас ограниченная, особенно, если приложение 32 разрядное. То есть, если памяти не хватит - получаем Out of memory. Значит, мы либо сбрасываем считанные результаты в кэш на диск, с которого и показываем результаты запроса юзеру, в гриде, например, как это делает BDE, и мы даже и не паримся, сколько там сожрало приложение памяти оперативной и не получит ли оно Out of memory. Второе решение - выставить pfibdataset.cachemodeloptions.cachemodelkind в cmkLimitedBufferSize, и тогда pfibdataset будет подкачивать отображаемые данные по мере их надобности: надо в last выставить - скачает последние записи, покажет, а надо в First - скачает первые, покажет, а надо пробежать от first до last, то будет выкачивать новые по мере прохождения по датасету, а старые выгружать из памяти, а когда к ним обращаемся снова - скачивать их снова с сервера. Во втором решении, вроде, всё прекрасно, но после выполнения запроса мы остаемся во взаимодействии с сервером. Хотелось бы скачать все данные запроса целиком, пусть в кэш на диске, потом отцепиться от сервера, и разглядывай их сколько хочешь в своем гриде, сколько бы их там не было тыщ строк. Штатного средства в FibPlus для этого нет, похоже? Или не нахожу просто?
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952457
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov
а память у нас ограниченная, особенно, если приложение 32 разрядное

Оффтоп: а есть версия FIB+ для 64-бита?
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952460
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,
Люди писали здесь, на форуме, что FibPlus не работает в 64 разрядных приложениях. То ли это означало, что и не откомпилится, то ли это означало, что будет работать некорректно, и надо допиливать - не знаю. У меня, к сожалению, Delphi XE. А так - да: возможности в использовании оперативки расширяются.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952463
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov,

пишут, что есть. 21801090
Я не пробовал.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952465
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

Хмм, интересно, спасибо. Что-то я проглядел этот топик и приуныл. Правда, у меня всё равно XE, а на последний Delphi перейти доходы с бизнеса не позволяют, но это вот уже и правда оффтоп :)
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952471
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov
Запрос в tpFibdataset выполняется для расчета сумм, то есть придется отфетчить все записи
если я всё правильно путаю, для расчёта сумм тебе не нужно мотаться по датасету взад-назад
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952474
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,
Для расчета сумм надо смотаться до конца один раз. Потом надо отобразить в гриде в приложении и, кстати, вернуться на первую запись. При cmkLimitedBufferSize, кстати, датасет призадумается, так как пойдет фетч уже первых записей, которые он давно выгрузил из памяти.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952475
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
V.Borzov
Запрос в tpFibdataset выполняется для расчета сумм, то есть придется отфетчить все записи
если я всё правильно путаю, для расчёта сумм тебе не нужно мотаться по датасету взад-назад

Мне кажется, человек хочет в модном гриде показывать итоговую строку с суммами.
А иначе непонятно, да.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952476
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov
Мимопроходящий,
Для расчета сумм надо смотаться до конца один раз. Потом надо отобразить в гриде в приложении и, кстати, вернуться на первую запись. При cmkLimitedBufferSize, кстати, датасет призадумается, так как пойдет фетч уже первых записей, которые он давно выгрузил из памяти.


А можно чуть подробнее про задачу, в которой надо сумму ста миллионов записей показывать?
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952478
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov
Для расчета сумм надо смотаться до конца один раз.
в этом случае буфер вообще можно отключить (UniDirectionale = True)
V.Borzov
Потом надо отобразить в гриде в приложении и, кстати, вернуться на первую запись
100500 записей показать?
КОМУ?!
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952479
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

Да просто тупо "журнал продаж", например. Полей много, максимально подробно выведена каждая строка. Вот делаем запрос, видим результат. Вот увеличиваем диапазон дат - out of memory. Всё.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952480
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov,

а были уже случаи, когда памяти не хватало?
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952482
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov
ъъъъъ,

Да просто тупо "журнал продаж", например. Полей много, максимально подробно выведена каждая строка. Вот делаем запрос, видим результат. Вот увеличиваем диапазон дат - out of memory. Всё.

"Журнал продаж" в генераторах отчетов формируют.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952484
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov> Да просто тупо "журнал продаж", например

Это отчёт или футер в гриде?

> Вот увеличиваем диапазон дат - out of memory. Всё.

На каком количестве записей?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952485
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
100500 записей показать?
КОМУ?!

Юзер знает, что есть журнал продаж, там сумма итого. Листать ему и не надо, может. Дает диапазон хрен знает какой и пытается вывести отчет. При больших диапазонах программа не справляется. Тут мы либо ограничиваем возможности этого отчета, запрещая юзеру выводить больше чем вот столько-то данных, чего хотелось бы избежать, либо исходим из того, что приложение может вывести всё, что захочет клиент, за счет оперативной памяти, за счет дискового пространства, или, в конце концов, за счет постоянных обращений к серверу. Но должно работать.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952486
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V.Borzov
Мимопроходящий
100500 записей показать?
КОМУ?!

Юзер знает, что есть журнал продаж, там сумма итого. Листать ему и не надо, может. Дает диапазон хрен знает какой и пытается вывести отчет. При больших диапазонах программа не справляется. Тут мы либо ограничиваем возможности этого отчета, запрещая юзеру выводить больше чем вот столько-то данных, чего хотелось бы избежать, либо исходим из того, что приложение может вывести всё, что захочет клиент, за счет оперативной памяти, за счет дискового пространства, или, в конце концов, за счет постоянных обращений к серверу. Но должно работать.


Понятно. Ставишь галку Unidirectional в True, в TpFIBDataSet, и всё.
...
Рейтинг: 0 / 0
pFibDataset - скинуть буфер на диск для экономии памяти
    #39952488
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov
Юзер знает, что есть журнал продаж, там сумма итого. Листать ему и не надо, может.
отделяй мух от котлет - считай "итого" отдельным небуферизированным запросом/датасетом
...
Рейтинг: 0 / 0
25 сообщений из 80, страница 1 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / pFibDataset - скинуть буфер на диск для экономии памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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