xml 형식으로 500.000 레코드 데이터베이스가 있어야합니다. xe5 Delphi 64bit 응용 프로그램 (ClientDataSet)에서 작업하십시오. 완전히 읽으면 4GB 이상의 메모리가 필요합니다. fetchondemand = False 및 PacketRecords = 5000 속성을 사용하려고 시도했지만 (설명서에 나와 있듯이) 전혀 작동하지 않습니다. 응용 프로그램은 이러한 변경 사항에 단순하게 영향을받지 않습니다. 아무도 나를 도울 수 있습니까?fetchondemand가 clientdataset에서 작동하지 않습니다.
2
A
답변
0
내 질문을 읽고 도움을 주신 모든 분들께 감사드립니다. 마지막으로 메커니즘이 명확하게 설명 된 데모를 발견했습니다. 이 솔루션은 매우 간단합니다. 사용 된 메모리를 제한하기 위해 fetchondemand로 작업 할 때 두 개의 데이터 세트가 있어야합니다. 기본 설정 (True 및 -1)이있는 첫 번째 데이터 집합은 XML 데이터베이스를 가리키고 데이터 공급자는이 데이터 집합을 가리키고 두 번째 데이터 집합은 fetchondemand 속성을 False로 설정하고 DataPackets는 원하는 레코드 번호로 설정합니다 하나의 패킷으로 가져 오기)가 데이터 제공 업체를 가리키고 있으며 데이터 인식 그리드가이 두 번째 데이터 세트를 가리키고 있습니다. 프로그래머는 GetNextPacket 프로 시저를 사용하여 전체 XML 데이터베이스를 그리드와 함께 구문 분석하기위한 페이징 메커니즘을 코딩해야합니다.
그런 바보 같은 질문에 불편을 끼쳐 드려 죄송합니다. 그 답은 내가 그랬던 것처럼이 메커니즘으로는 명확하지 않은 모든 사람들에게 도움이되기를 바랍니다.
가, 다시 한번 감사드립니다라즐로
이를 편집하고 문제를 재현하는 몇 가지 코드를 게시 할 수 있습니까? –
FetchOnDemand = True (CDS가 긍정적 인 PacketRecords 값을 알아 차릴 수 있음)를 의미하지 않습니까? 어쨌든, 나는 틀릴 수도 있지만 레코드의 가져 오기가 CDS와 관련된 공급자에 의해 중재 된 것으로 생각했기 때문에 이러한 속성 중 하나가 XML의 데이터 로딩에 영향을 미치지 않을 것이라고 생각했지만 Provider XML에서 로딩에 관여합니다. – MartynA
@MasonWheeler 모든 레코드를로드하면 응용 프로그램이 작동하므로 코드가 필요 없다고 생각하지 마십시오. 내 문제는 단지 메모리 사용이기 때문에 하나의 패치로로드 할 레코드 수를 제어하고 싶습니다. – Laszlo