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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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


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