2014-02-11 1 views
2

Имейте базу данных 500 000 записей в xml-форме, попробуйте работать с 64-битным приложением Xe5 с 64-разрядным приложением (ClientDataSet). Если я прочитаю его полностью, он занимает более 4 ГБ памяти. Пытался использовать свойства fetchondemand = False и PacketRecords = 5000 (как говорится в документации), но он вообще не работает. Приложение просто нечувствительно к этим изменениям. Может ли кто-нибудь помочь мне?fetchondemand не работает в clientdataset

+1

Вы можете редактировать это и разместить код, чтобы воспроизвести проблему? –

+0

Вы уверены, что не имеете в виду FetchOnDemand = True (для того, чтобы CDS обращала внимание на положительное значение PacketRecords)? Во всяком случае, я могу ошибаться, но я не ожидал бы, что любое из этих свойств повлияет на загрузку данных из XML, потому что я думал, что выборка записей оповещена провайдером, связанным с CDS, и я не думал, что поставщик участвует в загрузке из XML. – MartynA

+0

@MasonWheeler Не думайте, что необходим какой-либо код, так как приложение РАБОТАЕТ, если я загружаю все записи. Моя проблема - это «только» использование памяти, поэтому я хочу контролировать, сколько записей загружать с помощью одной выборки. – Laszlo

ответ

0

Благодарим вас за ВСЕ, кто прочитал мой вопрос и попытался помочь мне. Наконец, я нашел демонстрацию, где механизм объясняется четко. Решение довольно просто: для работы с fetchondemand необходимо задействовать ДВОЙНЫЕ НАБОРЫ, чтобы ограничить используемую память. Первый набор данных с настройками по умолчанию (True и -1)) указывает на базу данных XML, поставщик данных указывает на это, второй набор данных (у которого свойство fetchondemand установлено на False, а DataPackets - на нужный номер записи для извлечения в один пакет) указывает на поставщика данных, а сетка с поддержкой данных указывает только на этот второй набор данных. Программист должен закодировать механизм подкачки для разбора всей базы данных XML с помощью сетки с помощью процедуры GetNextPacket.

Извините за то, что вы беспокоили вас таким глупым вопросом, надеясь, что ответ поможет всем парням, которые не были ясны с этим механизмом, каким я был.

Еще раз спасибо,

Laszlo