Имейте базу данных 500 000 записей в xml-форме, попробуйте работать с 64-битным приложением Xe5 с 64-разрядным приложением (ClientDataSet). Если я прочитаю его полностью, он занимает более 4 ГБ памяти. Пытался использовать свойства fetchondemand = False и PacketRecords = 5000 (как говорится в документации), но он вообще не работает. Приложение просто нечувствительно к этим изменениям. Может ли кто-нибудь помочь мне?fetchondemand не работает в clientdataset
ответ
Благодарим вас за ВСЕ, кто прочитал мой вопрос и попытался помочь мне. Наконец, я нашел демонстрацию, где механизм объясняется четко. Решение довольно просто: для работы с fetchondemand необходимо задействовать ДВОЙНЫЕ НАБОРЫ, чтобы ограничить используемую память. Первый набор данных с настройками по умолчанию (True и -1)) указывает на базу данных XML, поставщик данных указывает на это, второй набор данных (у которого свойство fetchondemand установлено на False, а DataPackets - на нужный номер записи для извлечения в один пакет) указывает на поставщика данных, а сетка с поддержкой данных указывает только на этот второй набор данных. Программист должен закодировать механизм подкачки для разбора всей базы данных XML с помощью сетки с помощью процедуры GetNextPacket.
Извините за то, что вы беспокоили вас таким глупым вопросом, надеясь, что ответ поможет всем парням, которые не были ясны с этим механизмом, каким я был.
Еще раз спасибо,
Laszlo
Вы можете редактировать это и разместить код, чтобы воспроизвести проблему? –
Вы уверены, что не имеете в виду FetchOnDemand = True (для того, чтобы CDS обращала внимание на положительное значение PacketRecords)? Во всяком случае, я могу ошибаться, но я не ожидал бы, что любое из этих свойств повлияет на загрузку данных из XML, потому что я думал, что выборка записей оповещена провайдером, связанным с CDS, и я не думал, что поставщик участвует в загрузке из XML. – MartynA
@MasonWheeler Не думайте, что необходим какой-либо код, так как приложение РАБОТАЕТ, если я загружаю все записи. Моя проблема - это «только» использование памяти, поэтому я хочу контролировать, сколько записей загружать с помощью одной выборки. – Laszlo